传送门
这题需要确定每种表情的2种形式的优先级,然后直接遍历一遍矩阵即可。
两种表情是第二个形式的优先级高
/* 通过 ^ ^ ^ 和 ^ ^ ^ 可以确定第一种 v v v v v v 通过 和 可以确定第二种 > < < > > < < > > < < > */ #include<bits/stdc++.h> #define fuck(x) cout<<#x<<" "<<x<<endl; using namespace std; char mp[1005][1005]; int main() { int n,m,ans; while(scanf("%d %d",&n,&m)!=EOF) { ans=0; for(int i=0;i<=n+5;i++) for(int j=0;j<=m+5;j++) mp[i][j]=0; for(int i=1;i<=n;i++) scanf("%s",mp[i]+1); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { if(mp[i][j]=='^') { if(mp[i+1][j-1]==mp[i+1][j+1]&&mp[i+1][j+1]=='v') { ans++; mp[i][j]=mp[i+1][j-1]=mp[i+1][j+1]=0; ///fuck(i); ///fuck(j); ///cout<<2<<endl; } else if(mp[i][j+2]=='^'&&mp[i+1][j+1]=='v') { ans++; mp[i][j]=mp[i][j+2]=mp[i+1][j+1]=0; ///fuck(i); ///fuck(j); ///cout<<1<<endl; } } else if(mp[i][j]=='<') { if(mp[i-1][j+1]=='>'&&mp[i+1][j+1]=='>') { ans++; mp[i][j]=mp[i-1][j+1]=mp[i+1][j+1]=0; ///fuck(i); ///fuck(j); ///cout<<3<<endl; } else if(mp[i+1][j+1]=='>'&&mp[i+2][j]=='<') { ans++; mp[i][j]=mp[i+1][j+1]=mp[i+2][j]=0; } } } printf("%d\n",ans); } return 0; } /********************************************************************** Problem: 2166 User: leon_ Language: C++ Result: AC Time:48 ms Memory:3008 kb **********************************************************************/