【C++魅力时刻】
【C++魅力时刻】
记录一些因为语法问题不报RECE导致的WA
边界问题
本题n,m,a[i][j]范围 <=500
注意multiset特判if(son>min(n,m)) continue;
否则count计数会比较奇怪
const int N=500;
int n,m;
multiset<int> q[N+1];
//还有+1的情况
void solve(){
cin>>n>>m;
int ans=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
int a;
cin>>a;
q[min(i,j)].insert(a);
if(a==min(i,j)) ans++;
}
}
/*
for(int i=1;i<=min(n,m);i++){
for(auto son:q[i]) cout<<son<<" ";
cout<<endl;
}
*/
//cout<<ans<<endl;
int flag=0;
for(int i=1;i<=min(n,m);i++){
for(auto son:q[i]){
if(son==i) continue;
if(son>min(n,m)) continue;//注意判断边界条件 会有一些奇怪的交换
if(q[son].count(i)){
flag=1;
ans+=2;
break;
}
}
if(flag) break;
}
if(!flag){
//cout<<1<<endl;
for(int i=1;i<=min(n,m);i++){
for(auto son:q[i]){
//cout<<i<<endl;
if(son==i) continue;
if(son>min(n,m)) continue;
//cout<<(n+m-2*i+1)<<endl;
if(q[son].count(son)==(n+m-2*son+1)){
//cout<<1<<endl;
continue;
}
ans++;
flag=1;
break;
}
if(flag) break;
}
}
cout<<ans<<endl;
}