挑战编程~~之旅
果断在京东商城买了本挑战编程,开始了自己的竞赛之路~~
最近做了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; } }