为什么80分

P3956 [NOIP2017 普及组] 棋盘

希望更丰富的展现?使用Markdown
by t162 @ 2019-02-18 20:46:16


```cpp #include<bits/stdc++.h> using namespace std; int n,m,s1,s2,s3; struct s { int jin; int zou; int yanse; int mofa;//金币,有没有走过,有没有使用魔法,颜色是啥 } flag[105][1005]; int dx[4]= {0,0,1,-1}; int dy[4]= {1,-1,0,0}; struct edge { int x,y; edge(int _x,int _y):x(_x),y(_y) {} }; queue<edge>q; int main() { cin>>n>>m; memset(flag,-1,sizeof(flag));//初始 for (int i=1; i<=m; i++) { cin>>s1>>s2>>s3; flag[s1][s2].yanse=s3; } flag[1][1].jin=flag[1][1].zou=0; q.push(edge(1,1)); while(!q.empty()) {//判空 edge f=q.front(); q.pop(); for (int i=0; i<4; i++) { int xx=f.x+dx[i],yy=f.y+dy[i];//下标 if (xx>=1&&yy>=1&&xx<=n&&yy<=n) { if (flag[xx][yy].yanse!=-1&&flag[xx][yy].mofa==-1) { //情况一(下一个有颜色) if (flag[f.x][f.y].mofa==-1) {//未使用魔法 if (flag[xx][yy].yanse==flag[f.x][f.y].yanse&&(flag[xx][yy].zou==-1||flag[xx][yy].jin>flag[f.x][f.y].jin)) {//每个点的金币数 flag[xx][yy].zou=0; flag[xx][yy].jin=flag[f.x][f.y].jin; q.push(edge(xx,yy)); } if (flag[xx][yy].yanse!=flag[f.x][f.y].yanse&&(flag[xx][yy].zou==-1||flag[xx][yy].jin>flag[f.x][f.y].jin+1)) { flag[xx][yy].zou=0; flag[xx][yy].jin=flag[f.x][f.y].jin+1; q.push(edge(xx,yy)); } } if (flag[f.x][f.y].mofa==0) {//曾用过魔法 if (flag[xx][yy].yanse==flag[f.x][f.y].yanse&&(flag[xx][yy].zou==-1||flag[xx][yy].jin>flag[f.x][f.y].jin)) {//每个点的金币数 flag[xx][yy].zou=0; flag[f.x][f.y].yanse=-1; flag[f.x][f.y].mofa=-1; flag[xx][yy].jin=flag[f.x][f.y].jin; q.push(edge(xx,yy)); continue; } if (flag[xx][yy].yanse!=flag[f.x][f.y].yanse&&(flag[xx][yy].zou==-1||flag[xx][yy].jin>flag[f.x][f.y].jin+1)) { flag[xx][yy].zou=0; flag[f.x][f.y].mofa=-1; flag[xx][yy].jin=flag[f.x][f.y].jin+1; flag[f.x][f.y].yanse=-1; q.push(edge(xx,yy)); continue; } } } if (flag[xx][yy].yanse==-1) { if (flag[f.x][f.y].mofa==0) { continue; } if (flag[f.x][f.y].mofa==-1&&(flag[xx][yy].zou==-1||flag[xx][yy].jin>flag[f.x][f.y].jin+2)) { flag[xx][yy].jin=flag[f.x][f.y].jin+2; flag[xx][yy].zou=0; flag[xx][yy].mofa=0; flag[xx][yy].yanse=flag[f.x][f.y].yanse; q.push(edge(xx,yy)); } } } } } cout<<flag[n][n].jin; return 0; } ```
by t162 @ 2019-02-18 20:46:51


|