Mastermate官网 香港|英国|新加坡|澳大利亚|澳门|深圳硕士研究生申请平台

挑战编程~~之旅

  果断在京东商城买了本挑战编程,开始了自己的竞赛之路~~

  最近做了3道题~~写些感悟~~

第一道 3n+1问题,看完题后才发现原来是 这次的湘潭邀请赛中的第c题~~~~

好类似啊~~~直接模拟法过掉~~~

第二道题;minesweeping   贴在poj上的题 http://poj.org/problem?id=2612

这道poj上的题明显比valladolid上的题难一个档次~~~

  算法是: 注意队周边9个点的一次扫描~~累计点周围雷数~~

第三题:the trip  http://acm.hit.edu.cn/hoj/problem/view?id=1557

汗 ~~~对于输入数据的处理啊~~都被搞晕了~~

算法:

1 求 average

2 判断有几个人是比平均值多0.01的人

3 对所给的数据进行排序~~

4 判断比平均值多的人数的个数

5 用大约平均值的数减去每个人的平均数(要注意的是可能有人是比平均值多0.01的,先减去他)

 

 

post code about the second 

#include<stdio.h>
char a[300][300],b[300][300];
int  c[300][300];

int fun(int i,int j);
int n;
int main()
{
 int i,j,flag=0,x,y;
   while(scanf("%d",&n)!=EOF)
   {
     getchar();
     flag=0;
    for(i=1;i<=n;i++)
    {
      for(j=1;j<=n;j++)
      scanf("%c",&a[i][j]);
      getchar();                       
    }
    
    
    
    for(i=1;i<=n;i++)
    {
      for(j=1;j<=n;j++)
      {
      scanf("%c",&b[i][j]);
      }
      getchar();                       
    }
    
    
    
     for(i=1;i<=n;i++)
     for(j=1;j<=n;j++)
     {
     if(a[i][j]=='*')c[i][j]=-1;               
     else c[i][j]=fun(i,j);
     }
     
 /*    for(i=1;i<=n;i++)
     {
      for(j=1;j<=n;j++)
      printf("%d",c[i][j]);
      printf("\n");                                     
     }
   */ 
     for(i=1;i<=n;i++)
      for(j=1;j<=n;j++)
      {
        if(b[i][j]=='x'&&c[i][j]==-1) { flag=1; }                          
      }
    if(flag==1){
                for(i=1;i<=n;i++)
                 {  for(j=1;j<=n;j++)
                   {
                    if(c[i][j]==-1){printf("*");continue;}
                    if(b[i][j]=='x'){printf("%d",c[i][j]);continue;}
                    else printf(".");                                    
                   }
                 printf("\n");
                 }
                }
    else {
         for(i=1;i<=n;i++)
          { for(j=1;j<=n;j++)
           {
           if(b[i][j]=='x'){printf("%d",c[i][j]);continue;}
           else printf(".");                 
           }
          printf("\n");   
          }
        }
     
     
     
                           
   }
     
    
}


int fun(int i,int j)
{
    int sum=0;
    if(i-1>=1){if(a[i-1][j]=='*')sum++;}
    if(i+1<=n){if(a[i+1][j]=='*')sum++;}
    if(j-1>=1){if(a[i][j-1]=='*')sum++;}
    if(j+1<=n){if(a[i][j+1]=='*')sum++;}
    if(i-1>=1&&j-1>=1){if(a[i-1][j-1]=='*')sum++;}
    if(i-1>=1&&j+1<=n){if(a[i-1][j+1]=='*')sum++;}
    if(i+1<=n&&j-1>=1){if(a[i+1][j-1]=='*')sum++;}
    if(i+1<=n&&j+1<=n){if(a[i+1][j+1]=='*')sum++;}
    return sum;
    
}

post code about the third problem~~

/*This Code is Submitted by 1115332213 for Problem 1557 at 2012-05-27 22:38:21*/
#include<iostream>
#include<algorithm>
#include<iomanip>
#include<stdlib.h>
using namespace std;
double  a[1005];
int main()
{
      double num,sum,ave,yu,result;
      int n,i ,flag=0;
      while(cin>>n&&n!=0)
      {
       sum=0;
       for(i=1;i<=n;i++)
       {
          cin>>num;
          a[i]=num;
          sum+=num;
       }                     
      ave=(float)((int)(sum/n*100))/100;
   //  cout<<"ave="<<ave<<endl;
      yu=sum-ave*n;
     // cout<<"yu="<<setiosflags(ios::fixed)<<yu<<endl;
     yu=yu/0.01;
        
    sort(a+1,a+1+n);
    
 //   for(i=1;i<=n;i++)
  //  cout<<a[i]<<endl;
    
    sum=0;
    for(i=n;i>=1;i--)
    {
      if(a[i]>ave)sum+=a[i];
      else break;                 
    }    
    
    i=n-i;
 //   cout<<"i="<<i<<" "<<"num="<<num1<<endl;
 //   cout<<"average="<<ave<<endl;
//    cout<<"sum="<<sum<<endl;
//    cout<<"hou="<<i*(ave+0.01)<<endl;
//    cout<<"i="<<i<<endl;
//    cout<<"yu="<<yu<<endl;
    if(i<=yu) result=sum-i*(ave+0.01);
    else result=sum-yu*(ave+0.01)-(i-yu)*ave;
   
 //   cout<<"result="<<result<<endl;
    
   
    cout<<setiosflags(ios::fixed)<<setprecision(2)<<"$"<<result<<endl;
    
    }
    
    
    
}
 
posted @ 2012-05-27 23:20  大嘴鸟  阅读(180)  评论(0编辑  收藏  举报
Mastermate官网 香港|英国|新加坡|澳大利亚|澳门|深圳硕士研究生申请平台