洛谷题解洛谷题解题解:AT_past202203_f 地図の塗り分け
xyx404
思路:
遍历每个点,查看点的右方和下方,如果两个点分属不同的州且颜色相同输出 No
并结束程序,否则继续遍历,为什么不用查看上方和下方呢,因为我们是按顺序遍历的从左到右,从上到下,在遍历的过程中已经确认这个点和这个点的上方和左方符合条件了。
遍历完后输出 Yes
。
代码:
#include<bits/stdc++.h> using namespace std; #define LL long long #define itn int #define ull unsigned long long int h,w,n,jz[210][210],c[500]; int dx[]={0,1},dy[]={1,0}; int main(){ memset(jz,0,sizeof(jz)); cin>>h>>w>>n; for(int i=1;i<=h;i++){ for(int j=1;j<=w;j++)cin>>jz[i][j]; } for(int i=1;i<=n;i++)cin>>c[i]; for(int i=1;i<=h;i++){ for(int j=1;j<=w;j++){ int tampx,tampy; tampx=dx[0]+i,tampy=dy[0]+j; if(jz[tampx][tampy]!=jz[i][j]){ if(c[jz[tampx][tampy]]==c[jz[i][j]]){ cout<<"No\n";return 0; } } tampx=dx[1]+i,tampy=dy[1]+j; if(jz[tampx][tampy]!=jz[i][j]){ if(c[jz[tampx][tampy]]==c[jz[i][j]]){ cout<<"No\n";return 0; } } } } cout<<"Yes\n"; return 0; }
|