【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;
}
posted @ 2025-08-15 11:24  White_ink  阅读(6)  评论(0)    收藏  举报