2017 計蒜之道 初賽 第一場 A.阿里的新遊戲
阿新 • • 發佈:2019-01-29
題目背景是成三棋,題目要求是輸入小紅和小明的棋子位置,用座標表示(棋盤的座標系建在原點中心,橫縱座標都是從-3到3),然後輸出小紅的成三數(這個線段上有三個小紅的棋子)。
題目描述很簡單,但是我花了一個小時才AC,而且用的是最笨的方法,枚舉了16種可能的情況,正解肯定不會是這個,但好在還是AC了...
這也是我第一次做這種線上賽,發現自己的實力還是很弱,我清楚的記得比賽開始10分鐘,已經有接近50人AC,而當時我還在思考。所以說,人與人之間的差距還是特別的大。
記錄這道題的原因,或許就因為這是我第一次的線上賽吧,而且還是真真正正自己獨立完成的題目,儘管特別簡單,可能是因為平時我遇到不會的題目,喜歡看其他人的題解,導致自己遇到問題時,獨立解決的能力還是很弱。
希望自己以後多些獨立思考的時間,少看題解... Orz 另外附上我的超長程式碼(可能是我提交過最長的程式碼了,判斷條件冗長)
另外再附上我WA N次的記錄...#include <stdio.h> char map[7][8]; int main() { int n,m; int i,j; int cnt=0; int ans=0; scanf("%d %d",&n,&m); for(i=0;i<7;++i) for(j=0;j<7;++j) map[i][j]='#'; for(i=0;i<n;++i) { int a,b; scanf("%d %d",&a,&b); //座標系與char陣列的轉換 int x=a; int y=b; if(x==3) b=6; else if(x==2) b=5; else if(x==1) b=4; else if(x==0) b=3; else if(x==-1) b=2; else if(x==-2) b=1; else if(x==-3) b=0; if(y==3) a=0; else if(y==2) a=1; else if(y==1) a=2; else if(y==0) a=3; else if(y==-1) a=4; else if(y==-2) a=5; else if(y==-3) a=6; map[a][b]='@'; } for(i=0;i<m;++i) { int c,d; scanf("%d %d",&c,&d); } for(j=0;j<7;++j) { if(map[0][j]=='@') //列舉16種情況 cnt++; } if(cnt==3) ans++; cnt=0; for(j=0;j<7;++j) { if(map[6][j]=='@') cnt++; } if(cnt==3) ans++; cnt=0; for(i=0;i<7;++i) { if(map[i][0]=='@') cnt++; } if(cnt==3) ans++; cnt=0; for(i=0;i<7;++i) { if(map[i][6]=='@') cnt++; } if(cnt==3) ans++; cnt=0; for(j=1;j<=5;++j) { if(map[1][j]=='@') cnt++; } if(cnt==3) ans++; cnt=0; for(j=1;j<=5;++j) { if(map[5][j]=='@') cnt++; } if(cnt==3) ans++; cnt=0; for(i=1;i<=5;++i) { if(map[i][1]=='@') cnt++; } if(cnt==3) ans++; cnt=0; for(i=1;i<=5;++i) { if(map[i][5]=='@') cnt++; } if(cnt==3) ans++; cnt=0; for(j=2;j<=4;++j) { if(map[2][j]=='@') cnt++; } if(cnt==3) ans++; cnt=0; for(j=2;j<=4;++j) { if(map[4][j]=='@') cnt++; } if(cnt==3) ans++; cnt=0; for(i=2;i<=4;++i) { if(map[i][2]=='@') cnt++; } if(cnt==3) ans++; cnt=0; for(i=2;i<=4;++i) { if(map[i][4]=='@') cnt++; } if(cnt==3) ans++; cnt=0; for(j=0;j<=2;++j) { if(map[3][j]=='@') cnt++; } if(cnt==3) ans++; cnt=0; for(j=4;j<=6;++j) { if(map[3][j]=='@') cnt++; } if(cnt==3) ans++; cnt=0; for(i=0;i<=2;++i) { if(map[i][3]=='@') cnt++; } if(cnt==3) ans++; cnt=0; for(i=4;i<=6;++i) { if(map[i][3]=='@') cnt++; } if(cnt==3) ans++; cnt=0; printf("%d\n",ans); return 0; }