CSU 2166: 卖萌表情(2018湖南省赛)
这题需要确定每种表情的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
**********************************************************************/