Công cụ bảo vệ mã nguồn .NET mạnh nhất, không thể unpack, miễn phí cho các khách hàng đầu tiên đăng ký.
Trang 3 trên tổng số 69 Đầu tiênĐầu tiên 123451353... Cuối cùngCuối cùng
Từ 21 tới 30 trên tổng số 688 kết quả

Đề tài: Võ đường quán: Tuyển tập đề thi các kì thi Olympic tin học

  1. #21
    Ngày gia nhập
    06 2010
    Nơi ở
    Nha Trang City
    Bài viết
    495

    Mặc định Võ đường quán: Tuyển tập đề thi các kì thi Olympic tin học

    @AlexBlack ko sài struct đc ko?
    Code cơ bản nha, cho dễ hiểu
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.
    Embedded ARM

  2. #22
    Ngày gia nhập
    07 2010
    Bài viết
    288

    Trích dẫn Nguyên bản được gửi bởi hienclubvn Xem bài viết
    @AlexBlack ko sài struct đc ko?
    Code cơ bản nha, cho dễ hiểu
    mình để struct để truyền 1 cái cho khỏi dài dòng thôi. chứ không có phải tạo nhiêu đó biến. nếu bạn không rành struct lắm thì cứ giả coi nó như sau

    vì dụ r.n ->n
    r.Arraya ->Array

  3. #23
    Ngày gia nhập
    06 2010
    Nơi ở
    Nha Trang City
    Bài viết
    495

    OK, thực ra thì Struct thì mình hiểu, nhưng các dạng bài toán này đều có thể giải quyết bằng mảng, nên muốn có nhiều dạng. Struct cũng đc, mảng cùng đc, cái gì cũng đc, miễn sao cứ có lời giải cho anh em cùng tham luận, học tập
    P/S: @vietduc Hãy làm ko spam nha Nội Quy Topic nói rõ rùi đó (Code thay vì Spam)

    Chém 3 chỉ có mỗi AlexBlack chém thui (Tính tới time hiện tại), các Bro chém tiếp đi nha... 12h tối nếu ko ai Chém nữa thì We chuyển qua Chém 4

    C Code:
    1. //Chem 3: Nhan dang anh
    2. //gia tri anh tu : 0-->255
    3. // kiem tre KxK (cac gia tri !=0) la OK
    4. #include<stdio.h>
    5. #include<conio.h>
    6. #include<stdlib.h>
    7. #define IN "FEATURE.INP"
    8. #define OUT "FEATURE.OUT"
    9. int **A,n,k,count=0;
    10. FILE *fin,*fout;
    11. void Read()
    12. {
    13.      fin=fopen(IN,"r");
    14.      fscanf(fin,"%d %d",&n,&k);
    15.      // cap phat bo nho dong
    16.      A=(int**)malloc(n*sizeof(int));
    17.      for(int i=0;i<n;i++)
    18.      {
    19.           A[i]=(int*)malloc(n*sizeof(int));
    20.           //Load File
    21.           for(int j=0;j<n;j++) fscanf(fin,"%d",&A[i][j]);  
    22.      }
    23.      fclose(fin);//Close File
    24. }
    25. int Check(int p,int q)
    26. {
    27.     int i,j;
    28.     for(i=0;i<k;i++)
    29.        for(j=0;j<k;j++)
    30.          if (A[p+i][q+j]==0) return 0;
    31.     return 1;
    32. }
    33. int Process()
    34. {
    35.     int i,j;
    36.     for(i=0;i<=n-k;i++)//dong
    37.        for(j=0;j<=n-k;j++)//cot
    38.           if(Check(i,j)) count++;                
    39. }
    40. void Write()
    41. {
    42.      fout=fopen(OUT,"w");
    43.      fprintf(fin,"%d",count);
    44.      fclose(fout);
    45. }
    46. int main()
    47. {
    48.     Read();
    49.     Process();
    50.     Write();
    51.     return 0;
    52. }
    Đã được chỉnh sửa lần cuối bởi hienclubvn : 23-08-2010 lúc 07:51 AM. Lý do: Up Code
    Embedded ARM

  4. #24
    Ngày gia nhập
    10 2009
    Nơi ở
    ThăngLong.delay(1000);
    Bài viết
    313

    chém 1
    C++ Code:
    1. #include<iostream>
    2. #include<fstream>
    3. using namespace std;
    4. int main()
    5. {
    6.     ifstream infile("water.txt");
    7.     int water=0,n,*c,i,j;
    8.     infile >> n;
    9.     c=new int[n];
    10.     for ( i=0; i<n; i++)
    11.     {
    12.         int a;
    13.         infile >> a >> c[i];
    14.         water+=a;
    15.     }
    16.     for (i=0; i<n-1; i++)
    17.         for (j=i; j<n; j++)
    18.             if (c[i]>c[j])
    19.             {
    20.                 c[i]+=c[j];
    21.                 c[j]=c[i]-c[j];
    22.                 c[i]-=c[j];
    23.             }
    24.     i=0;
    25.     while (water>=c[i])
    26.         water-=c[i++];
    27.     cout << n-i;
    28.     return 0;
    29. }

  5. #25
    Ngày gia nhập
    10 2009
    Nơi ở
    ThăngLong.delay(1000);
    Bài viết
    313

    chém 2
    bài này không khó lắm nhưng mình không nghĩ ra cách nào hay cả, đành để cái if dài quá
    C++ Code:
    1. #include<iostream>
    2. #include<fstream>
    3. using namespace std;
    4. bool check(int **s, int i, int j)
    5. {
    6.     if (s[i][j]!=1 && (s[i][j+1]==1||s[i+1][j]==1||s[i][j-1]==1||s[i-1][j]==1||s[i+1][j-1]==1||s[i-1][j+1]==1||s[i+1][j+1]==1||s[i-1][j-1]==1))
    7.         return true;
    8.     return false;
    9. }
    10. int main()
    11. {
    12.     ifstream infile("rada.txt");
    13.     int M, N, n, i, j, a ,b,**s, t=0;
    14.     infile >> M >>N >>n;
    15.     s=new int*[M+2];
    16.     for (i=0; i<M+2; i++)
    17.     {
    18.         s[i]=new int[N+2];
    19.         for (j=0; j<N+2; j++)
    20.             s[i][j]=0;
    21.     }
    22.     for (i=0; i<n; i++)
    23.     {
    24.         infile >>a>>b;
    25.         s[a][b]=1;
    26.     }
    27.     for (i=1; i<=M; i++)
    28.         for (j=1; j<=N; j++)
    29.             if (check(s,i,j))
    30.                 t++;
    31.     cout << t+n;
    32.     return 0;
    33. }

  6. #26
    Ngày gia nhập
    06 2010
    Nơi ở
    Nha Trang City
    Bài viết
    495

    Mặc định Võ đường quán: Tuyển tập đề thi các kì thi Olympic tin học

    [Chém 1] ---> [Cùng chém với @vietduc]
    Bài này đi tìm số thùng chưa đầy (hoặc hết), để đem đi
    Vậy để số thùng mang đi là nhỏ nhất thì phải ưu tiên mang cái lớn trước
    Giải thuật: sắp xếp thứ tự tăng dần
    Lấy tổng lượng nước đổ đầy các thùng theo thứ tự từ nhỏ lên lớn, cho đến khi hết. Kiểm tra xem thùng nào chưa đầy thì vác đi

    C Code:
    1. #include<stdio.h>
    2. #include<conio.h>
    3. #include<stdlib.h>
    4. #define input "WATER.INP"
    5. #define output "WATER.OUT"
    6. void Swap(int &a,int &b)
    7. {
    8.      a^=b^=a^b;
    9. }
    10. void Sort(int a[],int n)
    11. {
    12.      for(int i=0;i<n-1;i++)
    13.        for(int j=i+1;j<n;j++)
    14.        if (a[i]<a[j]) Swap(a[i],a[j]);
    15. }
    16. int main ()
    17. {
    18.     FILE *f,*f1;
    19.     int N,i=0,Sum=0,*Arr,temp;
    20.     f=fopen(input,"rt");
    21.     fscanf(f,"%d\n",&N);
    22.     Arr=(int*)malloc(N*sizeof(int));
    23.     while(!feof(f))
    24.     {
    25.         fscanf(f,"%d ",&temp);
    26.         fscanf(f,"%d\n",&Arr[i++]);
    27.         Sum+=temp;          
    28.     }
    29.     // Sap xep lai
    30.     Sort(Arr,N);
    31.     // thuc hien do day nuoc
    32.     i=0;
    33.     while(Sum&&i<N)
    34.     {
    35.         Sum-=Arr[i++];  
    36.         if (Sum<0) temp=N-i-1;
    37.     }
    38.     f1=fopen(output,"wt");
    39.     fprintf(f1,"%d",temp);
    40.     getch();
    41. }
    P/S: Các bác Chém hộ Code của em luôn cái, Gà mù Code sai đầy
    Embedded ARM

  7. #27
    Ngày gia nhập
    10 2009
    Nơi ở
    ThăngLong.delay(1000);
    Bài viết
    313

    chém 3, mình dịc từng ô một rồi check xem nó có thỏa mãn hay không, nếu có thì ++, không biết có ai làm hay hơn không, chứ mình thấy nó cứ cùi cùi sao ấy, toàn là duyệt lần lượt
    C++ Code:
    1. #include<iostream>
    2. #include<fstream>
    3. using namespace std;
    4. bool check(int **s, int k, int m, int n)
    5. {
    6.     for (int i=0; i<k; i++)
    7.         for (int j=0; j<k; j++)
    8.             if (!s[m+i][n+j])
    9.                 return false;
    10.     return true;
    11. }
    12.  
    13. int main()
    14. {
    15.     int n, k, **s, i, j, t=0;
    16.     ifstream infile("feature.txt");
    17.     infile >>n >> k;
    18.     s=new int*[n];
    19.     for (i=0; i<n; i++)
    20.     {
    21.         s[i]=new int[n];
    22.         for (j=0; j<n; j++)
    23.             infile >> s[i][j];
    24.     }
    25.     for (i=0; i<=n-k; i++)
    26.         for (j=0; j<n-k; j++)
    27.             if (check(s,k,i,j))
    28.                 t++;
    29.     cout << t;
    30.     return 0;  
    31. }

  8. #28
    Ngày gia nhập
    06 2010
    Nơi ở
    Nha Trang City
    Bài viết
    495

    Ok, Như đã hẹn. 12h đã đến . We tiếp tục đến với Chém 4, để lại bao nhiêu nối tiếp cho các Beginner Nhưng các bạn Yên tâm hoàn toàn có thể Chém lại mà, Khi mà Chủ Topic HienClubVn Củ Chuối còn chưa vững nữa là (Làm sao mà cho nó đi qua đơn giản vậy chứ)

    Bài Chém 4. Mã hóa (Khối ko chuyên 2006)

    Sử dụng giá trị sai phân là một phương pháp đơn giản để mã hóa và truyền tín hiệu số. Phương pháp này được thực hiện theo nguyên lý thay vì truyền tín hiệu thu được ở thời điểm t nào đó thì truyền sai số của nó so với tín hiệu thu được ở thời điểm ngay trước đó. Ví dụ, chúng ta có một dãy tín hiệu gốc thu được lần lượt là 0, 2, 4, 5, 4 thì dãy tín hiệu sai phân sẽ là 0, 2, 2, 1, -1. Chúng ta qui ước tín hiệu đầu tiên có giá trị là 0 và sai phân của nó cũng là 0, và trong dãy có ít nhất một tín hiệu có giá trị khác 0. Người ta nhận thấy thông thường tín hiệu sai phân biến thiên trong một miền giá trị có biên độ nhỏ hơn so với biên độ của miền giá trị của tín hiệu gốc và do đó có thể biểu diễn các giá trị sai phân với số bit ít hơn so với biểu diễn tín hiệu gốc. Giả sử rằng miền giá trị của tín hiệu sai phân nằm trong đoạn [n, m] thì sẽ tồn tại một cách mã hóa để truyền một tín hiệu sai phân với số bít ít nhất là Log2(m-n+1) . Ở đây, Log2(m-n+1) là giá trị nguyên làm tròn lên của số thực Log2(m-n+1) (giá trị nguyên nhỏ nhất mà không nhỏ hơn Log2(m-n+1) ). Trong ví dụ trên, giá trị của miền tín hiệu sai phân nằm trong đoạn [-1, 2] và do đó số bit ít nhất để biểu diễn một giá trị sai phân là 2.
    Yêu cầu: Cho một dãy tín hiệu gốc là các giá trị nguyên, hãy tính số bít ít nhất để truyền dãy sai phân của dãy tín hiệu này.
    Dữ liệu: Vào từ tệp văn bản CODE.INP có định dạng như sau:
    • Dòng đầu tiên ghi số nguyên dương m (1 < m < 1000) là số lượng tín hiệu gốc.
    • Trên mỗi dòng thứ i trong m dòng tiếp theo ghi một số nguyên si là giá trị của tín hiệu gốc thứ i (-2^15 < Si < 2^15).
    Kết quả: Ghi ra tệp văn bản CODE.OUT số nguyên dương là số bit tối thiểu cần thiết để truyền dãy tín hiệu sai phân của dãy tín hiệu gốc này.
    Ví dụ:
    CODE.INP
    10
    0
    3
    5
    8
    10
    14
    18
    20
    19
    18

    CODE.OUT
    30
    Đã được chỉnh sửa lần cuối bởi hienclubvn : 10-08-2010 lúc 07:30 AM. Lý do: Nhầm số chém
    Embedded ARM

  9. #29
    Ngày gia nhập
    07 2010
    Bài viết
    288

    bạn ơi check lại kết quả đi. sao mình ra chỉ có 3 à. không phải 30
    C Code:
    1. #include<stdio.h>
    2. #include<math.h>
    3. #define input "water.txt"
    4. int Nhap(int *&a,int &n)
    5. {
    6.     FILE *f=fopen(input,"rt");
    7.     if(f==NULL)
    8.         return 0;
    9.     fscanf(f,"%d",&n);
    10.     a=new int[n];
    11.     for(int i=0;i<n;i++)
    12.     {
    13.         fscanf(f,"%d",&a[i]);
    14.     }
    15.     fclose(f);
    16.     return 1;
    17. }
    18.  
    19. int KtRong(int *a,int n)
    20. {
    21.     for(int i=0;i<n;i++)
    22.     {
    23.         if(a[i]!=0)
    24.             return 0;
    25.     }
    26.     return 1;
    27. }
    28.  
    29. int *MaHoa(int *a,int n)
    30. {
    31.  
    32.     if(KtRong(a,n)==1)
    33.         return NULL;
    34.     int *b=new int[n];
    35.     b[0]=a[0];
    36.     b[1]=a[1];
    37.     for(int i=2;i<n;i++)
    38.     {
    39.         b[i]=a[i]-a[i-1];
    40.     }
    41.     return b;
    42. }
    43. int Max(int *a,int n)
    44. {
    45.     int max=a[1];
    46.     for(int i=2;i<n;i++)
    47.     {
    48.         if(a[i]>max)
    49.             max=a[i];
    50.     }
    51.     return max;
    52. }
    53.  
    54. int Min(int *a,int n)
    55. {
    56.     int min=a[0];
    57.     for(int i=1;i<n;i++)
    58.     {
    59.         if(a[i]<min)
    60.             min=a[i];
    61.     }
    62.     return min;
    63. }
    64. int BitSaiPhan(int *a,int n)
    65. {
    66.     int min=Min(a,n);
    67.     int max=Max(a,n);
    68.  
    69.     int k=max-min+1;
    70.     double kq=log((double)k)/log(2.0);
    71.     return (kq-(int)kq)>0?(int)kq+1:(int)kq;
    72.  
    73. }
    74. int main()
    75. {
    76.     int n;
    77.     int *a,*b;
    78.     Nhap(a,n);
    79.     b=MaHoa(a,n);
    80.     printf("So bit toi thieu: %d",BitSaiPhan(b,n));
    81.  
    82. }
    Đã được chỉnh sửa lần cuối bởi AlexBlack : 10-08-2010 lúc 07:54 AM. Lý do: in nhầm

  10. #30
    Ngày gia nhập
    06 2010
    Nơi ở
    Nha Trang City
    Bài viết
    495

    bạn ơi check lại kết quả đi. sao mình ra chỉ có 2 à. không phải 30
    Bạn @AlexBlack mình đã Check lại rùi. OK giống nhau bạn ạ...
    Đề ko có vấn đề gì đâu

    P/S: Nói thật cái đề "Chuối" thật, tầm 12h trưa mình sẽ đưa ra chém 5, bỏ qua chém 4. Từ giờ đến lúc đó xem còn ai chém nữa ko
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.
    Embedded ARM

Các đề tài tương tự

  1. Tài liệu lập trình C Cần đề cương hướng dẫn Olympic tin học C
    Gửi bởi Doreamon9x trong diễn đàn Tài liệu, ebooks và công cụ
    Trả lời: 0
    Bài viết cuối: 22-07-2010, 10:51 AM
  2. Các đề thi Olympic qua các năm
    Gửi bởi cafelanh trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 17
    Bài viết cuối: 06-06-2010, 07:22 PM
  3. Xin hỏi về việc học olympic tin học
    Gửi bởi saolion trong diễn đàn Tài liệu, ebooks và công cụ
    Trả lời: 2
    Bài viết cuối: 04-09-2009, 01:13 PM
  4. Đề thi Olympic Quốc Nội !
    Gửi bởi Template trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 15
    Bài viết cuối: 27-11-2008, 05:37 PM
  5. Xin Ebook tương tự các đề thì olympic tin học
    Gửi bởi bathong trong diễn đàn Tài liệu, ebooks và công cụ
    Trả lời: 3
    Bài viết cuối: 30-10-2008, 10:33 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn