1. Trang chủ
  2. » Giáo án - Bài giảng

Định hướng chuyên môn trong đào tạo bồi dưỡng học sinh năng khiếu Tin học

64 349 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 64
Dung lượng 6,33 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Công cụ trợ giúp: Chương trình MTOOL.EXE trong thư mục chứa đề bài được cung cấp để thử nghiệm thực hiện các phép biến đổi và xác định trạng thái cuối của bảng.. Các hệ thống lập trình

Trang 1

ĐỊNH HƯỚNG CHUYÊN MÔN trong đào tạo – bồi dưỡng học sinh năng khiếu Tin học

 Phát hiện các nhân tố nổi bật để đào tạo và khai thác nguồn nhân lực đỉnh cao, có tri thức và có tay nghề theo kịp sự phát triển của lý thuyết và yêu cầu của thực tế

Việc đào tạo, bồi dưỡng học sinh giỏi Tin học chịu tác động rất nhiều của hai yếu tố:

 Sự phát triển của lý thuyết,

 Sự phát triển của công cụ Tin học

Có thể thấy rõ xu hướng dạy và học Tin học cho đến nay chia thành ba giai đoạn:

 Giai đoạn I: những năm cuối của thế kỷ XX,

 Giai đoạn II: Thập kỷ đầu tiên của thế kỷ XXI,

 Giai đoạn III: Thập kỷ thứ 2 của thế kỷ XXI, tức là những năm hiện tại

Ở giai đoạn I, ngành Tin học mới tách ra và phát triển thành một ngành khoa học độc lập Người ta tập trung mọi sức lực vào việc xây dựng nền móng cho một ngành khoa học mới, cố gắng tìm cách để giải quyết được các lớp bài toán truyền thống xuất hiện khi tiếp cận bài toán trên quan điểm toán học Việc nắm vững các kiến thức toán học là điều kiện chủ yếu để giải quyết các bài toán tin học Ngoài ra còn phải lưu ý tới cấc ràng buộc tự nhiên về bộ nhớ nhỏ và tốc

độ tương đối thấp của máy tính lúc bấy giờ Đó là sự tiếp tục của tư duy những năm 70 – 80 của thế kỷ 20

Ví dụ, bài Hình vuông diệu kỳ (Bài 3 ngày 2 IOI 1996) vào thời điểm đó là một bài khó

Hình vuông diệu kỳ

Trang 2

Những thành công của khối lập phương kỳ diệu đã là động lực để ông Rubic đề xuất phương án phẳng của trò chơi nổi tiếng này Đó là một bảng gồm 8 hình

vuông xếp thành 2 hàng (xem

hình vẽ)

Trong bài này chúng ta xét

phương án khi mỗi hình vuông

được tô một màu khác nhau Màu

được đánh bằng tám số nguyên

dương đầu tiên (xem hình vẽ)

Cấu hình của bảng được xác định

bằng cách cho màu của các hình

vuông, bắt đầu từ hình ở góc trên

trái và đi theo chiều kim đồng hồ Ví dụ, ở hình bên cấu hình ban đầu của bảng được xác định bởi dãy (1, 2, 3, 4, 5, 6, 7, 8)

Có 3 phép biến đổi cơ sở ký hiệu là „A‟, „B‟ và „C‟ tác động lên bảng:

 „A‟: Hoán đổi vị trí 2 dòng trên và dưới,

 „B‟: Đẩy vòng tròn cột cuối lên cột đầu,

 „C‟: Đẩy vòng tròn theo chiều kim đồng hồ 4 hình vuông ở giữa

Cho một cấu hình cuối của bảng Nhiệm vụ của bạn là viết chương trình xác định dãy phép biến đổi cơ sở đưa bảng từ trạng thái ban đầu nêu ở hình bên về trạng thái cuối đã cho (Bài toán con A) Bạn sẽ nhận thêm 2 điểm thưởng nếu số phép biến đổi trong lời giải của bạn không quá 300

Dữ liệu: vào từ file INPUT.TXT gồm một dòng chứa 8 số nguyên mô tả trạng

thái cuối của bảng

Kết quả: Đưa ra file OUTPUT.OUT, dòng đầu tiên chứa số nguyên L – độ dài

của dãy phép biến đổi Mỗi dòng trong L dòng sau chứa một ký tự - tên phép biến đổi cần thực hiện

Công cụ trợ giúp: Chương trình MTOOL.EXE trong thư mục chứa đề bài được

cung cấp để thử nghiệm thực hiện các phép biến đổi và xác định trạng thái cuối của bảng Lời gọi chương trình có dạng “MTOOL input.txt output.txt”

8 7 6 5

Phép biến đổi B

Phép biến đổi A Phép biến đổi C

Trang 3

Phân tích: Số lượng trạng thái khác nhau của bảng là 8! = 40 320 Việc tổ chức

loang và lưu trữ vết loang từ trạng thái ban đầu tới trạng thái đích trong điều kiện hiện nay không phải là một chuyện khó Nhưng vào thời điểm diễn ra kỳ thi, bộ nhớ có thể được sử dụng chỉ là 64KB + 64KB cấp phát động và máy thực hiện thuộc loại 386 thì đó là cả một vấn đề lớn

Chúng ta đã đạt được những kết quả rực rỡ trong thời kỳ này vì đội ngũ giáo viên tin học phần lớn xuất thân từ giáo viên chuyên ngành toán Học sinh của chúng ta được trang bị kiến thức cơ sở về toán khá tốt

Giai đoạn II từ những năm 2001 đến 2007, sự tiến bộ về công nghệ và sự phổ cập của các hệ thống phần mềm tiên tiến đã đưa đến những sự chuyển dịch trong việc đào tạo chuyên gia trong lĩnh vực tin học Điều này dẫn đến những thay đổi trong công tác phát hiện, đào tạo và bồi dưỡng học sinh giỏi tin học

Do đó nội dung thi Tin học Quốc tế cũng có nhiều thay đổi Các kiến thức giải thuật được coi là đỉnh cao trước đây bây giờ đã trở thành “bảng cửu chương”

mà ai cũng phải biết và phải thuộc Những giải thuật phức tạp, ít dùng thì không nhất thiết phải thuộc, nhưng bất cứ ai và lúc nào cũng có thể tra cứu, tìm kiếm chúng trên Internet khi cần thiết Sự thông minh và tính sáng tạo bây giờ phải thể hiện không phải ở chổ bạn thuộc nhiều hay ít các giải thuật khác nhau, cũng không phải bạn cài đặt chúng nhanh tới mức nào Thử thách bây giờ là ở chổ bạn có thể tìm ra những giải pháp hữu hiệu giải quyết một cách có hiệu quả các bài toán các vấn đề có mô hình toán học đơn giản nhưng có kích thước lớn hay không?

Để đạt được mục đích đó người lập trình phải biết tận dụng tối đa khả năng mà phần cứng và hệ điều hành cung cấp Các hệ thống lập trình mới như Free Pascal, Dev C++ (những phiên bản đầu tiên) đã tạo điều kiện để người dùng khai thác được tối đa khả năng của phần cứng

Đáng tiếc là tới tận năm 2007 khi thế giới đã đi hết chặng đường quan trọng này thì chúng ta mới được phép chính thức đặt chân lên mãnh đất đã in đầy dấu

Trang 4

chân của những người tiên phong, đi vào con đường vốn bây giờ đã trở thành kỷ niệm đẹp của những người đi trước

Ở giai đoạn III, tức là ở những năm gần đây, trong danh mục yêu cầu đối với người lập trình có thêm các đòi hỏi mới:

 Không những bạn phải đứng vững trên nền tảng của phần cứng và hệ thống mà còn phải biết khai thác tối đa khả năng của công cụ lập trình

Cụ thể, bạn phải khai thác được triệt để mặt mạnh của các thư viện của

hệ thống lập trình có trong tay,

 Nâng cao tính hoàn thiện của chương trình: chương trình phải cho kết quả

đúng và xử lý có hiệu quả với từng lớp dữ liệu (của bài toán)

 Phải biết tạo một chương trình linh hoạt, kết hợp vài loại giải thuật để giải một bài toán vốn rất đơn giản nếu kích thước bé

Trang 5

Ví dụ, bài Vườn bách thảo (Thi toàn Liên bang Nga 04/2011)

Trong vườn bách thảo có một khu đất hình chữ nhật kích thước w×h trồng một

loại cây đặc biệt quý hiếm Với mỗi cây người ta làm một lối đi tạo thành hình vuông có cây ở tâm Kích thước hình

vuông phụ thuộc vào vùng bộ rễ của cây

lan tới Nếu tạo hệ tọa độ để khu đất này

có 2 đỉnh đối là (0, 0) và (w, h) thì đỉnh

tất cả các hình vuông đều có tọa độ

nguyên Hai hình vuông bất kỳ không có

phần chung diện tích khác 0, tổng diện

tích các hình vuông có cây đúng bằng

diện tích khu đất, cạnh hình vuông song

song với trục tọa độ

Thời gian trôi đi và cỏ mọc um tùm che

kín các lối đi Người ta cần vẽ bản đồ

khôi phục lại các lối đi để lập trình điều

khiển rô bốt chăm sóc cây

Yêu cầu: Cho w, h, n, xi, yi, trong đó n

là số cây, (xi, yi) – tọa độ cây thứ i (1 ≤ w, h ≤ 1012, 1 ≤ n ≤ 2×105

) Hãy xác định độ dài cạnh hình vuông bao quanh mỗi cây Dữ liệu đảm bảo tồn tại lời giải

Dữ liệu: Vào từ file văn bản GARDEN.INP:

Dòng đầu tiên chứa 3 số nguyên w, h và n,

Dòng thứ i trong n dòng sau chứa 2 số thực xi và yi

Kết quả: Đưa ra file văn bản GARDEN.OUT n số nguyên trên n dòng, dòng

thứ i chứa cạnh hình vuông có tâm là cây thứ i

Phân tích: Để đạt được điểm tối đa cần phải biết tổ chức lưu trữ dữ liệu dưới

dạng đồ thị cây, thực hiện các phép xử lý cây, tổ chức tìm kiếm nhị phân trên trên đó

x

y

11

(w, h)

Trang 6

Các hệ thống lập trình như Free Pascal 2.4.4, Dev C++ 4.9.9 đều cung cấp những thư viện khổng lồ hỗ trợ người dùng và đều có thể mang lại những hiệu quả tương đương trong lập trình Tuy vậy C++ nhận được sự lựa chọn đông đảo thí sinh dự thi hơn vì các lý do:

 Thư viện chuẩn hộ trợ lập trình của C++ dễ tiếp cận hơn vì có nhiều tài liệu giới thiệu,

 Có nhiều phiên bản chương trình dịch miễn phí để những Ban tổ chức cung cấp cho thí sinh,

 Ở nhiều nước lấy C++ làm cơ sở giảng dạy ở trường phổ thông,

 Trong tương lai, khi lên đại học người ta sẽ dùng C++ là chủ yếu,

 Mặt mạnh của Pascal là khả năng thể hiện có cấu trúc trong quá trình triển khai giải thuật không còn là trọng tâm trong nội dung giảng dạy,

 C++ cho phép xây dựng chương trình tối ưu, thể hiện các tiểu xảo lập trình

Tuy vậy, C++ cũng có những mặt yếu của nó so với Pascal Ta sẽ nói đến những vấn đề này muộn hơn, khi đề cập tới công cụ lập trình

B – CÔNG CỤ LẬP TRÌNH

Trang bị kiến thức về ngôn ngữ lập trình chưa bao giờ là một vấn đề lớn trong tin học Điều quan trọng là kỹ thuật lập trìnhtổ chức dữ liệu Khi đã biết tương đối tốt một ngôn ngữ lập trình thì việc chuyển sang lập trình ở một ngôn ngữ mới khá đơn giản

Bên cạnh ngôn ngữ truyền thống PASCAL với hệ thống lập trình Free Pascal và C++ với hệ thống lập trình DEV C++, nhiều nước còn cho phép và khuyến khích sử dụng một loạt các ngôn ngữ khác như Delphi, Python, Java, C#, v v

Đương nhiên, khi chọn một ngôn ngữ nào đó làm công cụ cho mình người lập trình cần phải:

 Biết rõ những điểm mạnh và yếu của ngôn ngữ cũng như của hệ thống hệ thống lập trình hỗ trợ,

 Cần nắm vững các dịch vụ mà hệ thống lập trình cung cấp,

 Cần có thói quen suy nghĩ và hành động phù hợp với ngôn ngữ và hệ thống lập trình,

 Cần biết càng sâu càng tốt các thư viện chuẩn hỗ trợ lập trình và biết

khai thác chúng một cách tối ưu

Trang 7

Nếu có cách tiếp cận hợp lý thì những vấn đề trên có thể giải quyết được một cách khá đơn giản và hiệu quả

Ở nước ta, trong bậc PTTH hệ thống lập trình được sử dụng phổ biến là ngôn ngữ PASCAL với hệ thống lập trình Free Pascal Ở bậc đại học, ngôn ngữ lập trình chủ yếu là C/C++ với hệ thống Dev C++

Trên thế giới nhiều nước sử dụng C++ với các hệ thống lập trình Dev C++ hoặc tương đươngngay từ bậc phổ thông trung học

Việc giảng dạy đại trà trong nhà trường không phải là vấn đề thảo luận ở đây Nhưng việc trang bị công cụ cho học sinh năng khiếu , phục vụ cho các kỳ thi Tin học là vấn đề nằm trong tầm xem xét và xử lý của chúng ta

Các thành phần và cấu trúc tương đương của 2 hệ thống lập trình Các phép tính số học

Trang 9

Z[n-i]-=c;

}

Đặt điều kiện trong ngoặc

}

for (i=n;i>0;i ) {

}

Trang 10

Tổ chức chu trình có số lần lặp không biết trước

Phần đầu chương trình

Ở PASCAL có thể có hoặc không có phần đầu chương trình:

Ở C++: bắt buộc phải khai báo các thư viện:

while (i<j) {

}

Khai báo thư viện,

thừa không sao!

Trang 11

Tổ chức vào ra với file văn bản

Chương trình con và chương trình chính

fi>>a>>b>>c;

fi.close();

fo<<a<<” “<<b<<endl;

return(k);

} int main() { }

Trang 12

if (t>0) {k++;a[i]=t;

} else a[i]=0;

} } fo<<k<<endl;

if (k>0) for (long i= 1; i<=n;i++) if (a[i]>0) fo<<i << " "<<a[i]<<endl; fi.close(); fo.close();

} }

Trang 13

Xâu là một trong các loại dữ liệu cơ bản mà các hệ thống lập trình đều phải cung cấp địch vụ để khai báo, lưu trữ và xử lý

Cả trong PASCAL và C++ đều có 2 loại xâu:

 Trong PASCAL:

o Xâu kiểu string (ngắn và dài),

o Xâu kiểu Pchar trong hệ thống lập trình Free Pascal,

Trang 15

PASCAL cũng cung cấp những dịch vụ tương tự trong thư viện Strings Dưới đây là vài ví dụ nêu trong tài liệu hướng dẫn sử dụng của Free Pascal

PASCAL

Program Example13 ;

Uses s t r i n g s ;

{ Program to demonstrate the StrScan and StrRScan f u n c t i o n s }

Const P : PChar = ’ This i s a PCHAR s t r i n g ’ ;

S : Char = ’ s ’ ;

begin

Writeln ( ’P , s t a r t i n g from f i r s t ’ ’ s ’ ’ : ’ ,StrScan (P, s ) ) ;

Writeln ( ’P , s t a r t i n g from l a s t ’ ’ s ’ ’ : ’ ,StrRScan (P, s ) ) ;

{ Program to demonstrate the StrLower and StrUpper f u n c t i o n s }

Trang 16

Như vậy, việc dùng PASCAL hay C++ đều có thể giải quyết một cách hiệu quả

các bài toán thi học sinh giỏi Tuy vậy, trong mọi trường hợp, học sinh cần được:

 Trang bị thêm các kiến thức mới ,

 Có thói quen khai thác các công cụ trong hệ thống lập trình,

 Biết cách sử dụng hợp lý và có hiệu quả các công cụ hiện có

Đã là một công dạy và học, tại sao ta không làm việc ngay với C++? Điều này

là hoàn toàn khả thi và có lợi vì:

 Về mặt pháp lý:

o Bộ Giáo dục cho phép sử dụng C/C++ trong kỳ thi,

o Công cụ: cũng thuộc loại Open Sources ( miễn phí ),

 Về thời gian:

o 02 tiết cho việc giới thiệu cách viết chương trình trên C++,

o 02 tiết cho việc làm quen với môi trường lập trình Dev C++,

o Các kiến thức khác, nếu cần, trang bị dần trong suốt quá trình bồi dưỡng (theo nguyên tắc “ Mưa dầm thấm đất ”),

 Lợi ích:

o Thư viện chuẩn STL của C++ có nhiều dịch vụ cần thiết với học sinh (ví dụ như các công cụ sắp xếp theo các giải thuật khác nhau, các công cụ tìm kiếm, tổ chức stack, heap, xử lý vector, ma trận v

{ Program to demonstrate the StrPos f u n c t i o n }

Trang 17

 Về mục tiêu chiến lược lâu dài:

o Các kiến thức về kỹ năng lập trình sẽ được tận dụng triệt để trong tương lai khi học sinh lên đại học và ra làm việc,

o Đáp ứng yêu cầu về chiến lược đào tạo và nâng cao chất lượng

Giáo dục của nhà nước

Tất nhiên PASCAL với hệ thống lập trình Free Pascal vẫn được sử dụng song song như một tùy chọn cho những người yêu thích và vẫn hoàn toàn có thể đạt kết quả cao trong các kỳ thi

Các vấn đề cần lưu ý khi chuyển đổi công cụ

Trong thời gian đầu cần trợ giúp học sinh các vấn đề:

 Các loại lỗi cú pháp thường gặp ở giai đoạn đầu,

 Cách tạo file dữ liệu,

 Kỹ thuật cục bộ hóa biến,

 Khai thác giao diện của Dev C++ và các công cụ hiệu chỉnh,

 Vấn đề biến đổi kiểu dữ liệu trong biểu thức,

 Giới thiệu về sự tồn tại và tác dụng của một số thư viện trong STL

Tránh trang bị dồn dập kiến thức mới, đặc biệt là về các thư viện Phong cách lập trình theo kiểu C++ sẽ tự động được hình thành dần theo thời gian, đúng với

tinh thần “Trăng đến rằm sẽ tròn”

Các vấn đề này sẽ được xem xét ở các phần tiếp theo

Trang 18

SẮP XẾP

Hàm sắp xếp nhanh trên C++

void quickSort( int arr[], int left, int right) {

int i = left, j = right;

Trong nhiều trường hợp thường phải sắp xếp đồng thời 2 dãy Chỉ số CS và Giá

trị B, tức là sắp xếp cặp (csi, bi) theo giá trị tăng dần của bi và với những bibằng nhau cặp (csi, bi) có csi nhỏ hơn sẽ đứng trước

SẮP XẾP 2 DÃY

Ta có thể dễ dàng bổ sung mở rộng hàm sắp xếp nêu trên để giải quyết vấn đề này Tuy vậy, để tận dụng tối đa các khả năng sắp xếp khác nhau do hệ thống lập trình cung cấp ta cần tổ chức dữ liệu theo kiểu véc tơ, heap Chương trình sắp xếp sẽ có dạng:

Chương trình trên C chuẩn:

1 5 7 3 14 7 26 12

Xử lý đệ quy các nhóm

2

1 3 5 7 7 12 14 26

Trang 19

{

int val, idx; //val: b[i], idx: cs[i]

}Element;

typedef Element Arr[MAX];

int cmpf(const void *a, const void *b);

for (int i=0; i<n; i++)

printf("%d %d\n", a[i].val, a[i].idx);

Trang 20

typedef class CArr

Ghi chú: Nội dung của phần sắp xếp và sắp xếp 2 dãy được biên soạn theo tài liệu của thầy

Nguyễn Thanh Sơn, trường Phổ thông Năng khiếu , Đại học Quốc gia Thành phố Hồ Chí

Minh

Trang 21

BÀI TẬP VÀ CHƯƠNG TRÌNH

Để hỗ trợ cho việc triển khai giảng dạy trên C++ các bài tập dưới đây sẽ được giới thiệu kèm theo với lời giải trên ngôn ngữ C/C++ và Pascal (dựa trên cơ sở hệ thống lập trình Free Pascal) Khi đã có đủ tự tin trong việc lập trình ta sẽ thấy lời giải đưa ra dưới dạng chương trình hoàn thiện chỉ có tác dụng chủ yếu để tạo tests

Việc trình bày giải thuật dưới dạng sơ đồ khối cũng không giúp nhiều cho việc nắm bắt giải

thuật mà chỉ hỗ trợ cho việc viết chương trình (coding) được dễ dàng Ngoài ra, sơ đồ khối

còn hạn chế tính sáng tạo trong việc triển khai giải thuật

Với mỗi bài toán, quan trọng và cần thiết hơn cả là gợi ý về giải thuật, bao gồm:

 Hướng triển khai giải thuật,

 Cần có những dữ liệu gì, tổ chức như thế nào, giá trị đầu, cách biến đổi, dẫn xuất,

 Những điểm đặc biệt cần lưu ý,

 Đánh giá độ phức tạp,

Với một vài khâu xử lý quan trọng: có thể dẫn xuất câu lệnh hoặc đoạn chương trình

Việc dẫn xuất đầy đủ chương trình cũng rất cần thiết, nhưng chỉ ở giai đoạn đầu của quá trình đào tạo, bồi dưỡng học sinh

Việc tổ chức gợi ý giải thuật còn mất nhiều thời gian và công sức hơn cả việc trực tiếp viết chương trình giải!

Tuyệt đối tránh cung cấp cho học sinh chương trình hoàn thiện ngay từ đầu, khi học sinh chưa hiểu giải thuật, chưa bắt tay tự mình lập trình

Lời giải cho các bài tập ở phần đầu được đưa ra ở dạng song ngữ Ở nửa cuối của phần bài tập, khi đã có đủ kinh nghiệm với C++, các lời giải chỉ đưa ra ở dạng chương trình trên C++ hoặc C/C++

Trang 22

TẬP CON Tên chương trình: SUBSETS.???

Cho 2 tập số nguyên X={x 1 , x 2 , , x m } và Y={y 1 , y 2 , , y n}, trong đó:

x 1 < x 2 < < x m,

y 1 < y 2 < < y n

Nói X có thứ tự từ điển nhỏ hơn Y nếu thỏa mãn một trong hai điều kiện:

 i sao cho x 1 = y 1 , x 2 = y 2 , , x i-1 = y i-1 , x i < y i,

m < n và x 1 = y 1 , x 2 = y 2 , , x m = y m

Xét tập số nguyên {1, 2, , n} Từ tập này người ta có thể trích ra các tập con, trong mỗi tập

con các phần tử được liệt kê theo thứ tự tăng dần của giá trị và sắp xếp các tập con nhận được theo thứ tự tự điển tăng dần Các tập con được đánh số bắt đầu từ 1

Yêu cầu: Cho hai số nguyên n và k (1 < n ≤ 60, 1 ≤ k ≤ 260-1) Hãy xác định tập con thứ k

Dữ liệu: Vào từ file văn bản SUBSETS.INP gồm nhiều tets, mỗi test cho trên một dòng chứa

Trang 23

for (int i=n-1; i>=0;i ) { t=(t1<<i)&k;

if ( t==0) {d[n-i]=1; if (k==0) break;k ;}

else d[n-i]=0;

} for (int i=1;i<=n;i++) if (d[i]==1) fo<<i<<" ";

fo<<endl;

} int main() { while (! fi.eof()) { fi>>n>>k;

//if (n==0) break;

xly();

} fi.close();

fo.close();

}

Trang 25

INTERNET Tên chương trình: INTERNET.???

Giá truy cập internet phụ thuộc vào từng thời điểm trong tuần Các ngày trong tuần được

đánh số từ 1 đến 7 bắt đầu từ thứ 2 Bảng tính giá gồm n bản ghi (1 ≤ n ≤ 100), sắp xếp theo

thứ tự tăng dần của thời gian, mỗi bản ghi có dạng:

d cc:mm v

trong đó d là ngày trong tuần, cc – 2 số chỉ giờ (chế độ 24 giờ), mm – 2 số chỉ phút, v – giá mỗi phút truy nhập, là số nguyên (1 ≤ v ≤ 104) Giá truy nhập được giữ nguyên cho đến khi

gặp thời điểm mới ở bản ghi tiếp theo trong bảng Sau bản ghi thứ n là bảng ghi số 1

Yêu cầu: Cho bảng tính giá và danh sách xác định m phiên truy nhập mạng (1 ≤ m ≤ 105)

Mỗi phần tử của danh sách có dạng d cc:mm t, trong đó d, cc, mm có ý nghĩa như trong bảng giá, t – thời gian truy nhập tính theo phút, là số nguyên (1 ≤ t ≤ 109) Các phiên truy nhập có thể thuộc những tuần khác nhau Hãy tính chi phí “lướt” mạng

Dữ liệu: Vào từ file văn bản INTERNET.INP:

Dòng đầu tiên chứa 2 số nguyên n và m,

Mỗi dòng trong n dòng tiếp theo chứa một bảng ghi của bảng giá,

Ở m dòng cuối cùng mỗi dòng chứa một bản ghi về một phiên truy nhập

Kết quả: Đưa ra file văn bản INTERNET.OUT một số nguyên – chi phí phải trả

Trang 26

for (int i=1;i<=10080;++i)

{if (a[i]!=0) v=a[i];

Trang 28

28/64

Hồi còn bé Steve được tặng một đồ chơi gọi là bánh xe may mắn Đó là một cái đĩa có thể quay theo

chiều kim đồng hồ Vành của đĩa được chia thành n phần bằng nhau, trên mỗi phần có thể ghi một

chữ cái latinh in hoa Bên ngoài có một kim chỉ đến chữ cái

khi bánh xe dừng Thiết kế đồ chơi đảm bảo để kim không

bao giờ chỉ đúng vào vạch phân chia Cứ mỗi lần kim chạm

vào vạch phân chia lại có một tiếng chuông rất êm tai và bộ

đếm số tiếng chuông ở tâm bánh xe lại tăng thêm 1 Để bắt

đầu quay bánh xe người ta phải lắc nhẹ nó rồi mới quay được

và khi lắc bộ đếm trở về 0

Steve rất thích thú và chơi rất nhiều lần Steve không bao giờ

ghi các chữ cái trùng nhau trên vành bánh xe

Thông thường, với một bộ các chữ cái ghi trên vành bánh xe

Steve chơi k lần liên tiếp, sau mỗi lấn quay Steve ghi lại số

hiển thị ở tâm và chữ cái mà mũi tên chỉ tới

Điều đó diễn ra đã lâu lắm rồi Cây cối trong công viên thành

phố đã nhiều lần thay lá Chiếc đồ chơi xinh xắn đã thất lạc đâu đó Một lần tình cờ Steve tìm thấy mảnh giấy cũ ghi lại kết quả chơi Những kỷ niệm đẹp của thời thơ ấu êm dịu, vô tư lự chợt trào lên như những đợt sóng lừng và Steve không cưỡng nỗi ý nghĩ phải khôi phục lại dòng chữ đã viết trên bánh xe Tuy vậy, cũng không loại trừ khả năng do vội vàng, kết quả đã bị ghi sai (ai mà ngờ được mẫu giấy này lại có giá trị như vậy trong tương lai!) do đó không xác định được những gì đã ghi trên bánh xe Ngoài ra, kết quả lần chơi này cũng có thể khá nghèo nàn, không đủ thông tin để xác định hết các chữ cái đã ghi trên bánh xe

chỉ ở lượt quay này (2 ≤ n ≤ 25, 1 ≤ k ≤ 100, i = 1 ÷ k) Hãy xác định dòng chữ ghi trên vành bánh

xe kể từ ký tự lần cuối cùng được kim chỉ tới Nếu thông tin mâu thuẫn thì đưa raxâu chỉ chứa một ký

tự “!” Nếu một số ký tự không đủ thông tin để xác định thì vào vị trí đó trong xâu đưa ra ký tự “?”

Dữ liệu: Vào từ file văn bản WHEEL.INP:

Dòng đầu tiên chứa 2 số nguyên n và k,

Dòng thứ i trong k dòng sau chứa 2 giá trị m i và c i

Kết quả: Đưa ra file văn bản WHEEL.OUT xâu xác định được

V

R

9

Trang 30

readln(fi,n,k);

s:=''; err:=0; v:=n;

for i:= 1 to n do s:=s+'?';

for i:=1 to k do begin

readln(fi,m,c0,c);

v:=v-m; if v<=0 then v:=v+n;

if ((s[v]<>'?') and (s[v]<>c)) then begin err:=1; s:='!'; break end; s[v]:=c

end;

assign(fo,tfo); rewrite(fo);

if err=0 then begin s:=s+s; s:=copy(s,v,n) end; write(fo,s);

close(fi); close(fo) END

Trang 31

GHI TA Tên chương trình: GUITAR.???

Trong cuộc thi sáng tạo rô bốt Steve đã trình diễn rô bốt chơi ghi ta của mình, một rô bốt, theo lời mô tả của tác giả “có đến hàng tỷ ngón tay”!

Đàn ghi ta có 6 dây đánh số từ 1 đến 6 và có p phím đánh số từ

1 đến p Khi chơi nhạc người ta gẩy dây và bấm phím để có các

giai điệu khác nhau Với mỗi dây, nếu có nhiều phím cùng

được bấm thì âm điệu sẽ được quyết định bởi phím có số cao

nhất Ví dụ, âm điệu khi gẩy dây số 3 và bấm đồng thời các

phím 5 và 7 sẽ giống như khi ta gẩy dây này và chỉ bấm phím

số 7

Điều khó khăn nhất khi biểu diễn một bài nhạc là điều khiển

cường độ tức phải gẩy dây nào và bấm phím nào, còn điều

khiển trường độ (thời gian phát một nốt) không phải là quá khó

về phương diện kỹ thuật Chương trình điều khiển cường độ

của Steve được tối ưu hóa theo hướng giảm số lần chuyển tay

bấm phím xuống còn ít nhất

Xét bản nhạc có n nốt, nốt thứ i được cho bởi cặp giá trị

nguyên (s i , f i ), trong đó s i – dây cần gẩy và f i – phím cần

bấm phím 5, tất cả là 7 thao tác, thực hiện trên dây số 2

, i = 1 ÷ n) Hãy xác định số

thao tác bấm phím ít nhất cần thực hiện

Dữ liệu: Vào từ file văn bản GUITAR.INP:

Dòng đầu tiên chứa 2 số nguyên n và p,

Dòng thứ i trong n dòng sau chứa 2 số nguyên s i và f i

Kết quả: Đưa ra file văn bản GUITAR.OUT một số nguyên – số thao tác bấm phím ít nhất

Trang 32

while a[s,k]>f do begin dec(k); inc(r) end;

if a[s,k]<f then begin inc(k);a[s,k]:=f; inc(r) end

Ngày đăng: 06/07/2017, 13:57

HÌNH ẢNH LIÊN QUAN

Hình vẽ). - Định hướng chuyên môn trong đào tạo  bồi dưỡng học sinh năng khiếu Tin học
Hình v ẽ) (Trang 2)
HÌNH KHỐI  Tên chương trình: CUBES.??? - Định hướng chuyên môn trong đào tạo  bồi dưỡng học sinh năng khiếu Tin học
n chương trình: CUBES.??? (Trang 63)
Hình khối bậc i người ta tạo ra hình khối bậc i+1 bằng cách dán các hình lập phương vào các  mặt trống của nó - Định hướng chuyên môn trong đào tạo  bồi dưỡng học sinh năng khiếu Tin học
Hình kh ối bậc i người ta tạo ra hình khối bậc i+1 bằng cách dán các hình lập phương vào các mặt trống của nó (Trang 63)

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w