难点:不易拿满分
先判断是否有第一次释放,若有,则释放次数为1。
在此基础上,判断“下一次”释放技能与“上一次”是否重复,若释放在不同行/列,则行/列数++,否则不变。
直到释放完毕(h[i]/l[i]值为0)
#include<bits/stdc++.h>
#include<algorithm>//包含sort函数
#include<string>
using namespace std;
int h[1010];
int l[1010];
int main()
{
int n,m,q;
cin>>n>>m>>q;
int i,j=0,k=0;
for(i=0;i<q;i++)
{
int a,b;
cin>>a>>b;
if(a==0) h[j++]=b;//h[]=b攻击哪一行 怎么判断输入列/行相同 相同怎么存储
else l[k++]=b; //攻击哪一列
}
//cout<<j-1<<endl;
sort(h,h+j);
sort(l,l+k);
int hs=0,ls=0;
//细心一点,不要漏过每一种情况!!!!!!!!
if(h[0]) hs=1;
if(l[0]) ls=1;
for(i=1;i<q;i++)
{
if(h[i]!=h[i-1]&&h[i]!=0) hs++;
if(l[i]!=l[i-1]&&l[i]!=0) ls++;
}
//cout<<hs<<" "<<ls<<endl;
int ans;
/*if(hs+ls==1) {
if(q!=0) cout<<0;
else cout<<n*m;
}*/
ans=n*m-(hs*m+ls*n-(hs*ls));
cout<<ans;
return 0;
}