Trang 2 trên tổng số 69 Đầu tiênĐầu tiên 12341252... Cuối cùngCuối cùng
Từ 11 tới 20 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. #11
    Ngày gia nhập
    07 2010
    Bài viết
    288

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

    buổi tối mình không ol được.
    ý tưởng mình là ma trận hóa từng ô
    nơi nào có rada thì gán là 1
    nơi nào nằm trong vùng rada quan sát được thì gán =2
    nơi nào rada không quan sát được thì là 0;
    kiểm tra chỗ nào không bằng 0 lấy tổng.
    đây là demo code của mình.
    C Code:
    1. #include<stdio.h>
    2. #define input "water.txt"
    3. typedef struct Rada
    4. {
    5.     int n,m;
    6.     int **Array;
    7.     int nrada;
    8. };
    9.  
    10. void Init(Rada &r)
    11. {
    12.     for(int i=0;i<r.m;i++)
    13.         for(int j=0;j<r.n;j++)
    14.             r.Array[i][j]=0;
    15. }
    16. int Nhap(Rada &r)
    17. {
    18.     FILE *f=fopen(input,"rt");
    19.     if(f==NULL)
    20.         return 0;
    21.     fscanf(f,"%d",&r.m);
    22.     fscanf(f,"%d",&r.n);
    23.     r.Array=new int*[r.m];
    24.     for(int i=0;i<r.n;i++)
    25.     {
    26.         r.Array[i]=new int[r.n];
    27.     }
    28.     Init(r);
    29.     fscanf(f,"%d",&r.nrada);
    30.     int p,q;
    31.     while(!feof(f))
    32.     {
    33.         fscanf(f,"%d",&p);
    34.         fscanf(f,"%d",&q);
    35.         r.Array[p][q]=1;
    36.     }
    37.     fclose(f);
    38.     return 1;
    39. }
    40.  
    41. void ChanHoa(Rada &r)
    42. {
    43.     for(int i=0;i<r.m;i++)
    44.         for(int j=0;j<r.n;j++)
    45.         {
    46.             if(r.Array[i][j]==1)
    47.             {
    48.                 if(i-1>-1)
    49.                 {
    50.                     if(j-1>-1)
    51.                         r.Array[i-1][j-1]=2;
    52.                     r.Array[i-1][j]=2;
    53.                     if(j+1<r.m)
    54.                         r.Array[i-1][j+1]=2;
    55.                 }
    56.                 if(j-1>-1)
    57.                     r.Array[i][j-1]=2;
    58.                 if(j+1<r.m)
    59.                     r.Array[i][j+1]=2;
    60.                 if(i+1<r.n)
    61.                 {
    62.                     if(j-1>-1)
    63.                         r.Array[i+1][j-1]=2;
    64.                     r.Array[i+1][j]=2;
    65.                     if(j+1<r.m)
    66.                         r.Array[i+1][j+1]=2;
    67.                 }
    68.             }
    69.         }
    70. }
    71.  
    72. void XuatAnToan(Rada r)
    73. {
    74.     ChanHoa(r);
    75.     int sum=0;
    76.     for(int i=0;i<r.m;i++)
    77.         for(int j=0;j<r.n;j++)
    78.         if(r.Array[i][j]!=0)
    79.             sum+=1;
    80.     printf("Tong so o an toan: %d",sum);
    81. }
    82.  
    83. //hủy vùng nhớ cấp phát
    84. void Detroy(Rada &r)
    85. {
    86.     for(int i=0;i<r.m;i++)
    87.         delete []r.Array[i];
    88.     delete []r.Array;
    89. }
    90. int main()
    91. {
    92.     Rada r;
    93.     if(!Nhap(r))
    94.     {
    95.         printf("Khong mo duoc file.");
    96.         return 0;
    97.     }
    98.     XuatAnToan(r);
    99.     Detroy(r);
    100.     return 0;
    101. }

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

    @dkcnn...., @Tadius, @Pannaruto...
    Nói rõ giải thuật nha..
    1. Bài này áp dụng giải thuật nào
    2. Giải thuật này đc dùng như thế nào?
    3. Áp dụng cho những loại bài nào
    4. Giải thích cụ thể vào bài toán trên

    P/S: Thay mặt các Mem tham gia Topic thanks các bác
    Embedded ARM

  3. #13
    Ngày gia nhập
    07 2010
    Nơi ở
    Thư viện
    Bài viết
    123

    mình bỏ qua bước nhập và kiểm tra nha.
    b1:vì màng chưa có giá trị , mình cho tất cả các phần tử =1.
    b2:cho nhập i,j (cho giống với đề bài mình cho i-1 , j-1) là tọa độ của rada .mình tính tổng các phần tử(nếu =1) của rada trong phạm vi 3*3.( khỏi lo biên vì biên không có giá trị) . Sau đó cho tất cả phần tử =0(nếu rada khác có trong phạm vi này thì cũng không cộng vô được);

    @hienclubvn: sao bạn không up code của bạn lên cho mọi người cùng share và trao đổi.

    C Code:
    1. #include <conio.h>
    2. #include <string.h>
    3. #include <iostream>
    4. using namespace std;
    5. int rada(int a[][50],int i,int j)
    6. {
    7.     int s=0;
    8.     for(int l=i-1;l<=i+1;l++)
    9.         for(int k=j-1;k<=j+1;k++)
    10.             if(a[l][k]==1)
    11.             {
    12.                 s++;
    13.                 a[l][k]=0;
    14.             }
    15.     return s;
    16. }
    17. void main()
    18. {
    19.     int a[50][50],i,j,n,m,k=0,s=0;
    20.     do{
    21.         cout<<"RADAR.INP\n";
    22.         cin>>m>>n;
    23.     }while(m<1||n<1||n>50||m>50);
    24.     for(int l=0;l<m;l++)
    25.         for(int h=0;h<n;h++)
    26.             a[l][h]=1;
    27.     while(k<1||k>m*n)
    28.         cin>>k;
    29.     while(k--!=0)
    30.     {
    31.         do{
    32.             cin>>i>>j;
    33.         }while(i<1||i>m||j<1||j>n);
    34.         s=s+rada(a,i-1,j-1);
    35.     }
    36.     cout<<"RADAR.OUT\n"<<s;
    37.     getch();
    38. }
    "một người chưa bao giờ vấp ngã, chưa bao giờ thất bại, chưa bao giờ phạm phải bất kỳ một sai lầm nào là một người có tương lai vô cùng mờ mịt." - Og Mandino

    Tổng hợp các quyển sách hay Mp3

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

    Chém 2 của HienClub nèk
    Ý tưởng: Cái nào an toàn cho bằng 1, OK
    CODE Full
    C Code:
    1. #include<stdio.h>
    2. #include<conio.h>
    3. #include<stdlib.h>
    4. #define INPUT "RADAR.INP"
    5. #define OUTPUT "RADAR.OUT"
    6. int **B,n,m;
    7. int dx[3]={-1,0,1};
    8. int dy[3]={-1,0,1};
    9. void Rada(int x,int y)
    10. {
    11.      int i,j,u,v;
    12.     for(i=0;i<3;i++)
    13.     {
    14.         u=x+dx[i];            
    15.         for(j=0;j<3;j++)
    16.         {
    17.            v=y+dy[j];            
    18.            if((u>=1&&u<=n)&&(v>=1&&v<=m))
    19.            {
    20.               B[u-1][v-1]=1;
    21.            }
    22.         }
    23.     }
    24. }
    25. void Print()
    26. {
    27.      int i,j;
    28.      for(i=0;i<m;i++)
    29.      {
    30.          for(j=0;j<m;j++)
    31.          printf("%d  ",B[i][j]);
    32.          printf("\n");            
    33.      }
    34. }
    35. int SumSafe() // Tổng các ô an toàn
    36. {
    37.     int i,j,temp=0;
    38.     for(i=0;i<m;i++)
    39.       for(j=0;j<n;j++)
    40.       if(B[i][j]==1)temp++;
    41.     return temp;
    42. }
    43. int main()
    44. {
    45.     //Read File
    46.     FILE *fin;
    47.     fin=fopen(INPUT,"r");
    48.     // Cap phat bo nho
    49.     fscanf(fin,"%d %d\n",&m,&n);
    50.     B=(int**)malloc(m*sizeof(int));
    51.     for(int i=0;i<m;i++)
    52.     {
    53.         B[i]=(int*)malloc(n*sizeof(int));
    54.         for(int j=0;j<n;j++) B[i][j]=0;
    55.     }
    56.     int temp,x,y;
    57.     fscanf(fin,"%d\n",&temp);
    58.     for(int i=0;i<temp;i++)
    59.     {
    60.         fscanf(fin,"%d %d\n",&x,&y);  
    61.         Rada(x,y);
    62.     }
    63.     fclose(fin);
    64.     //Xuat ra man hinh
    65.     Print();
    66.     printf("Tong Cell Safe = %d",SumSafe());
    67.     //Ghi vao File
    68.     FILE *fout;
    69.     fout=fopen(OUTPUT,"w");
    70.     fprintf(fout,"%d",SumSafe());
    71.     fclose(fout);
    72.     getch();
    73. }
    Đã được chỉnh sửa lần cuối bởi hienclubvn : 13-08-2010 lúc 08:52 AM.
    Embedded ARM

  5. #15
    Ngày gia nhập
    07 2010
    Nơi ở
    Thư viện
    Bài viết
    123

    @AlexBlack: code của bạn không ổn .
    ví dụ:
    lúc đầu mảng co dạng
    0 0 0 0
    0 1 1 0
    0 0 0 0
    sau khi chuẩn hóa có dạng:
    2 2 2 0
    2 2 2 0
    2 2 2 0
    vì bạn đã đổi số 1 ở ô (3,3) thành số 2 rồi. nên nó không xét được số 1 ô (3,3) .
    "một người chưa bao giờ vấp ngã, chưa bao giờ thất bại, chưa bao giờ phạm phải bất kỳ một sai lầm nào là một người có tương lai vô cùng mờ mịt." - Og Mandino

    Tổng hợp các quyển sách hay Mp3

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

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

    Trích dẫn Nguyên bản được gửi bởi dkbcnncb11 Xem bài viết
    @AlexBlack: code của bạn không ổn .
    ví dụ:
    lúc đầu mảng co dạng
    0 0 0 0
    0 1 1 0
    0 0 0 0
    sau khi chuẩn hóa có dạng:
    2 2 2 0
    2 2 2 0
    2 2 2 0
    vì bạn đã đổi số 1 ở ô (3,3) thành số 2 rồi. nên nó không xét được số 1 ô (3,3) .
    í quên chỗ này rồi. đợi tí mình sẽ sửa ngay.
    cảm ơn bạn dkbcnncb11 rất nhiều. mình đề nghị để code lỗi trên kia luôn để mọi người biết chỗ sai
    mình làm lại như sau
    xét những chỗ không phải là rada kiểm tra xem chỗ đó có phải là vùng an toàn hay không
    ở đây mình sử dụng mảng từ 1-m,1-n để bỏ qua việc kiểm tra điều kiện biên.
    PHP Code:
    #include<stdio.h>
    #define input "water.txt"
    typedef struct Rada
    {
        
    int n,m;
        
    int **Array;
        
    int nrada;
    };

    void Init(Rada &r)
    {
        for(
    int i=0;i<=r.m;i++)
            for(
    int j=0;j<=r.n;j++)
                
    r.Array[i][j]=0;
    }
    int Nhap(Rada &r)
    {
        
    FILE *f=fopen(input,"rt");
        if(
    f==NULL)
            return 
    0;
        
    fscanf(f,"%d",&r.m);
        
    fscanf(f,"%d",&r.n);
        
    r.m++;
        
    r.n++;
        
    r.Array=new int*[r.m+1];
        for(
    int i=0;i<=r.n;i++)
        {
            
    r.Array[i]=new int[r.n+1];
        }
        
    Init(r);
        
    fscanf(f,"%d",&r.nrada);
        
    int p,q;
        while(!
    feof(f))
        {
            
    fscanf(f,"%d",&p);
            
    fscanf(f,"%d",&q);
            
    r.Array[p+1][q+1]=1;
        }
        
    fclose(f);
        return 
    1;
    }

    void ChanHoa(Rada &r)
    {
        for(
    int i=1;i<r.m;i++)
            for(
    int j=1;j<r.n;j++)
            {
                if(
    r.Array[i][j]==0)
                {
                    if(
    r.Array[i-1][j-1]==1||r.Array[i-1][j]==1||r.Array[i-1][j+1]==1)r.Array[i][j]=2;
                    if(
    r.Array[i][j-1]==1||r.Array[i][j+1]==1)r.Array[i][j]=2;
                    if(
    r.Array[i+1][j-1]==1||r.Array[i+1][j]==1||r.Array[i+1][j+1]==1)r.Array[i][j]=2;

                }
            }
    }

    void Xuat(Rada r)
    {
        for(
    int i=1;i<r.m;i++)
        {
            for(
    int j=1;j<r.n;j++)
                
    printf("%d ",r.Array[i][j]);
            
    printf("\n");
        }
    }

    void XuatAnToan(Rada r)
    {
        
    ChanHoa(r);
        
    int sum=0;
        for(
    int i=1;i<r.m;i++)
            for(
    int j=1;j<r.n;j++)
            if(
    r.Array[i][j]!=0)
                
    sum+=1;
        
    printf("Tong so o an toan: %d",sum);
    }

    //hủy vùng nhớ cấp phát
    void Detroy(Rada &r)
    {
        for(
    int i=0;i<r.m+1;i++)
            
    delete []r.Array[i];
        
    delete []r.Array;
    }


    int main()
    {
        
    Rada r;
        if(!
    Nhap(r))
        {
            
    printf("Khong mo duoc file.");
            return 
    0;
        }
        
    XuatAnToan(r);
        
    Detroy(r);
        return 
    0;

    Đã được chỉnh sửa lần cuối bởi AlexBlack : 09-08-2010 lúc 10:13 AM.

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

    mình đề nghị để code lỗi trên kia luôn để mọi người biết chỗ sai
    Rất đồng tình với quan điểm của bạn AlexBlack
    Mặc dù mình ko biết về Struct (Ko chủ ý học cái này, chủ yếu học cơ bản + giải thuật) nhưng rất hoan nghênh

    Tạm lắng Bài chém 2 đi, để tiếp tục cho Topic sôi nỗi (Hướng đến Hot Topic), chúng ta gác mọi sự kiện (Nếu ai thắc mắc về 2 chém trước thì cứ Comment nha - cái này ko cấm )

    BÀI CHÉM SỐ 3: Tìm đặc trưng ảnh (Ko chuyên 2005)

    Một nhóm nghiên cứu xử lý ảnh của trường ĐH Khoa học tự nhiên, ĐHQG Tp.HCM đang
    giải quyết bài toán nhận dạng mặt người trong ảnh. Ảnh chụp mặt người sau khi đã xử lý là
    một bảng vuông A kích thước N x N (10 ≤ N ≤ 800) với mỗi ô (I,J) (1 ≤ I, J ≤ N) có giá trị từ
    0 đến 255 là mức xám của ảnh tại ô này (trong đó 0 là màu nền). Để xác định vị trí có thể là
    mặt người, nhóm cần thống kê các đặc trưng có dạng hình vuông kích thước K x K (1 ≤ K ≤
    40) trong đó tất các các giá trị trong hình vuông đều phải khác 0.
    Yêu cầu : Từ một ảnh chụp mặt người, hãy giúp nhóm nghiên cứu đếm tất cả các đặc trưng
    có trong ảnh đó.
    Dữ liệu : Vào từ file văn bản FEATURE.INP trong đó :
    • Dòng đầu chứa hai sô N và K
    • Dòng thứ I trong N dòng tiếp theo chứa tương ứng dòng thứ I của bảng A.
    Các số ghi trên một dòng được ghi cách nhau bởi ít nhất một khoảng trắng. Mỗi dòng có N số
    nguyên. Dòng thứ I là các giá trị của N phần tử trong dòng thứ I-1 trong bảng vuông A
    Kết quả : Ghi ra file văn bản FEATURE.OUT số lượng đặc trưng tìm được.



    FEATURE.INP
    6 2
    0 12 15 0 33 30
    17 19 23 15 16 0
    11 12 0 14 14 0
    0 10 11 8 10 0
    0 8 7 12 0 0
    0 0 11 13 0 0

    FEATURE.OUT
    7
    Embedded ARM

  8. #18
    Ngày gia nhập
    12 2009
    Nơi ở
    bế quan tu lại
    Bài viết
    846

    C++ Code:
    1. int main()
    2. {
    3.     int **a, n, i, j, tongco = 0, tongchua = 0,  dem = 0, nuoccan;
    4.  
    5.     cout << "Nhap so thung: ";
    6.     cin >> n;
    7.  
    8.     a = new int *[n];
    9.     for(i = 0; i < n; i++)
    10.     {
    11.         a[i] = new int;
    12.         for(j = 0; j < 2; j++)
    13.         {
    14.             cin >> a[i][j];
    15.         }
    16.         tongco += a[i][0];
    17.         tongchua += a[i][1];
    18.     }
    19.    
    20.     for(i = 0; i < n - 1; i++)
    21.         for(j = i + 1; j < n; j++)
    22.         {
    23.             if(a[i][1] < a[j][1])
    24.             {
    25.                 int tam = a[i][1];
    26.                 a[i][1] = a[j][1];
    27.                 a[j][1] = tam;
    28.             }
    29.         }
    30.    
    31.     nuoccan = tongchua - tongco;
    32.  
    33.     int tong = 0;
    34.     for(i = 0; i < n; i++)
    35.     {
    36.             if(nuoccan > tong)
    37.             {
    38.                 tong += a[i][1];
    39.  
    40.                 dem++;
    41.             }
    42.             else
    43.             {
    44.                 cout << dem << endl;
    45.                 break;
    46.             }
    47.     }
    48.    
    49.     for(int j = 0; j < 2; j++)
    50.         delete a[j];
    51.     delete a[i];
    52.  
    53.     system("pause");
    54.     return 0;
    55. }
    đây là bài chém 1 mình làm.
    Tư tưởng của mình là lấy tổng dung tích có thể chứa trong tất cả các bình trừ đi lượng nước các bình đã có sẽ ra số lượng nước cần lấy. Sau đó chỉ cần đem số thùng có tổng dung tích lớn hơn số nước còn thiếu đi là được.

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

    Ok, các bác cứ chém thoải mái, ko hạn chế.
    Chém 1, chém 2, ai muốn chém tiếp, vẫn cứ Post nha, ko gần ngại (Miễn sao xoay quanh vấn đề học tập là OK hết)
    P/S: em đi nhậu đây, các bác cứ làm việc.... Hì
    Embedded ARM

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

    bài 3
    mình duyệt toàn bộ ma trận, kiểm tra những vùng có diện tích KxK xem có phải là mặt người hay không. nếu phải thì tăn biến đếm lên.
    demo code.

    C Code:
    1. #include<stdio.h>
    2. #define input "FEATURE.INP"
    3. typedef struct Anh
    4. {
    5.     int n;
    6.     int k;
    7.     int **Array;
    8. };
    9.  
    10. void Init(Anh &a)
    11. {
    12.     for(int i=0;i<a.n;i++)
    13.         for(int j=0;j<a.n;j++)
    14.             a.Array[i][j]=0;
    15. }
    16. int Nhap(Anh &a)
    17. {
    18.     FILE *f=fopen(input,"rt");
    19.     if(f==NULL)
    20.         return 0;
    21.     fscanf(f,"%d",&a.n);
    22.     fscanf(f,"%d",&a.k);
    23.     a.n;
    24.     a.Array=new int*[a.n];
    25.     for(int i=0;i<a.n;i++)
    26.     {
    27.         a.Array[i]=new int[a.n];
    28.     }
    29.     //Init(a);
    30.     for(int i=0;i<a.n;i++)
    31.         for(int j=0;j<a.n;j++)
    32.         {
    33.             fscanf(f,"%d",&a.Array[i][j]);
    34.         }
    35.     fclose(f);
    36.     return 1;
    37. }
    38. int KtMatNguoi(Anh a,int p,int q)
    39. {
    40.     for(int i=p;i<p+a.k;i++)
    41.         for(int j=q;j<q+a.k;j++)
    42.         {
    43.             if(a.Array[i][j]==0)
    44.                 return 0;
    45.         }
    46.         return 1;
    47. }
    48.  
    49.  
    50. int SoMatNguoi(Anh a)
    51. {
    52.     int sum=0;
    53.     for(int i=0;i<a.n-a.k+1;i++)
    54.         for(int j=0;j<a.n-a.k+1;j++)
    55.         {
    56.             if(KtMatNguoi(a,i,j))
    57.                 sum++;
    58.         }
    59.     return sum;
    60. }
    61.  
    62. //hủy vùng nhớ cấp phát
    63. void Detroy(Anh &r)
    64. {
    65.     for(int i=0;i<r.n;i++)
    66.         delete []r.Array[i];
    67.     delete []r.Array;
    68. }
    69.  
    70. int main()
    71. {
    72.     Anh a;
    73.     if(!Nhap(a))
    74.     {
    75.         printf("Khong mo duoc file.");
    76.         return 0;
    77.     }
    78.     printf("So mat nguoi trong anh: %d",SoMatNguoi(a));
    79.     Detroy(a);
    80.     return 0;
    81. }

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