标签:chess 感想 scanf include scan color col return 评测
NOIP2017,我考挂了,心情既有点郁闷又有点不服气。
第3、4题都写挂了。
这次考试我的评测结果也很神奇,自己下官网数据竟然比结果高了10分,结果没申诉(不知道怎么申诉,老师也说没问题,然而obviously我肯定不会超时。~尴尬~),最后比省一查了5分!!无语!!
最后调试后,调到了360分。(所以说吗,不服气~)
附上第3题,AK的代码:
#include<bits/stdc++.h> using namespace std; const int dx[4] = {-1,0,1,0} , dy[4] = {0,1,0,-1}; int n,m,ans[105][105],Map[105][105],front,rear,x[100005],y[100005],cost[100005]; int main() { freopen("chess.in","r",stdin); freopen("chess.out","w",stdout); scanf("%d %d",&m,&n); for (int i = 0 ; i <= m+1 ; i ++) for (int j = 0 ; j <= m+1 ; j ++) { Map[i][j] = -1; ans[i][j] = INT_MAX; } for (int i = 1 ; i <= n ; i++) { int tx,ty,c; scanf("%d %d %d",&tx,&ty,&c); Map[tx][ty] = c; } ans[1][1] = 0; front = 1 ; rear = 1; x[1] = 1 ; y[1] = 1; cost[1] = 0; while (front <= rear) { int nx = x[front] , ny = y[front] , nc = cost[front]; for (int i = 0 ; i < 4 ; i ++) { int tx = nx + dx[i] , ty = ny + dy[i] , now; if (tx > 0 && tx <= m && ty > 0 && ty <= m) { if (Map[tx][ty] != -1) { now = (Map[nx][ny] == Map[tx][ty]) ? nc : nc + 1; if (now < ans[tx][ty]) { ans[tx][ty] = now; ++rear; x[rear] = tx; y[rear] = ty; cost[rear] = now; } } else { now = nc + 2; if (now < ans[tx][ty]) ans[tx][ty] = now; for (int j = 0 ; j < 4 ; j ++) { int rx = tx + dx[j] , ry = ty + dy[j]; now = (Map[nx][ny] == Map[rx][ry]) ? nc + 2:nc + 3; if (rx > 0 && rx <= m && ry >0 && ry <= m && Map[rx][ry] != -1 && now < ans[rx][ry]) { ans[rx][ry] = now; ++rear; x[rear] = rx; y[rear] = ry; cost[rear] = now; } } } } } front ++; } if (ans[m][m] == INT_MAX) cout<<-1<<endl; else cout<<ans[m][m]<<endl; return 0; }
标签:chess 感想 scanf include scan color col return 评测
原文地址:http://www.cnblogs.com/YMY666/p/7899685.html