rt,写完之后本地测完样例对了就交了,然后样例1WA(剩下除了两个样例过了都WA)
然后大惑不解的我去 AtC 测了样例,发现1多输出一组数据:200005 1(我开的N范围)
然后更加疑惑的我改了i的输出范围(输出的 ≤ 改成了<)然后加了些long long这下AtC自测也对了但是交上去依旧样例WA
我没有发现明显的问题,有没有佬知道我哪里出错了?感激不尽qwq
附上代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e5+5;
struct nodes{
int hw,id,color;
}arr[N];
ll h,w,m,ans;
ll nof0;
ll num[N];
bool hvis[N],wvis[N];
int hhas,whas;//当某一行已经被访问,求列时不能涂这行,减去
int main(){
scanf("%lld%lld%lld",&h,&w,&m);
for(int i=1;i<=m;i++){
scanf("%d%d%d",&arr[i].hw,&arr[i].id,&arr[i].color);
}
for(int i=m;i>=1;i--){
if(arr[i].hw==1){//hang(tips:hang shi HENG ZHE DE!!!)
if(hvis[arr[i].id]==0){
num[arr[i].color]+=w-whas;
hvis[arr[i].id]=1;
hhas++;
}
}else{//lie
if(wvis[arr[i].id]==0){
num[arr[i].color]+=h-hhas;
whas++;
}
}
}
nof0=h*w;
for(int i=1;i<=N;i++) nof0-=num[i];
if(nof0!=0) ans++;//
num[0]=nof0;
for(int i=1;i<=N;i++){
if(num[i]!=0) ans++;
}
printf("%lld\n",ans);
for(int i=0;i<N;i++){
if(num[i]!=0) printf("%d %lld\n",i,num[i]);
}
return 0;
}