悬关求调
查看原帖
悬关求调
754000
zajasi楼主2024/3/23 13:01
#include<bits/stdc++.h>
using namespace std;
#define int long long
#pragma GCC optimize(1)
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#define pb push_back
#define mp make_pair
int n;
int a,b;
int x[8];
int y[8];
vector<pair<int,int> > v;
void dfs(){
    for(int i=0;i<v.size();i++){
        if(v[i].first==a&&v[i].second==b||v[i].first==b&&v[i].second==a){
            cout<<"Yes";
            exit(0);
        }
    }
    for(int i=0;i<v.size();i++){
        for(int j=i+1;j<v.size();j++){
            int xx=v[i].first;
            int yy=v[i].second;
            int tx=v[j].first;
            int ty=v[j].second;
            if(v[i].first==v[j].first){
                // if((v[i].first>a||v[i].second+v[j].second>b)&&(v[i].first>b&&v[i].second+v[j].second>a))continue;
                v.pb(mp(v[i].first,v[i].second+v[j].second));
                v.erase(v.begin()+i,v.begin()+i+1);
                v.erase(v.begin()+j-1,v.begin()+j);
                dfs();
                v.insert(v.begin()+i,mp(xx,yy));
                v.insert(v.begin()+j,mp(tx,ty));
                v.pop_back();
            }
            if(v[i].first==v[j].second){
                // if((v[i].first>a||v[i].second+v[j].first>b)&&(v[i].first>b||v[i].second+v[j].first>a))continue;
                v.pb(mp(v[i].first,v[i].second+v[j].first));   
                // cout<<"make "<<v[i].first<<" "<<v[i].second+v[j].first<<"\n";   
    
                v.erase(v.begin()+i,v.begin()+i+1);
                v.erase(v.begin()+j-1,v.begin()+j);
                // for(int i=0;i<v.size();i++){
                //     cout<<v[i].first<<" "<<v[i].second<<"\n";
                // }                     
                dfs();
                v.insert(v.begin()+i,mp(xx,yy));
                v.insert(v.begin()+j,mp(tx,ty));
                v.pop_back();
            }
            if(v[i].second==v[j].first){
                v.pb(mp(v[i].second,v[i].first+v[j].second));
                // cout<<"make "<<v[i].second<<" "<<v[i].first+v[j].second<<"\n";
                v.erase(v.begin()+i,v.begin()+i+1);
                v.erase(v.begin()+j-1,v.begin()+j);
                dfs();                
                v.insert(v.begin()+i,mp(xx,yy));
                v.insert(v.begin()+j,mp(tx,ty));
                v.pop_back();
            }
            if(v[i].second==v[j].second){
                v.pb(mp(v[i].first+v[j].first,v[i].second));
                // cout<<"make "<<v[i].first+v[j].first<<" "<<v[i].second<<"\n";
                v.erase(v.begin()+i,v.begin()+i+1);
                v.erase(v.begin()+j-1,v.begin()+j);
                dfs();             
                v.insert(v.begin()+i,mp(xx,yy));
                v.insert(v.begin()+j,mp(tx,ty));
                v.pop_back();  
            }
        }
    }
}
main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    cin>>n>>a>>b;
    for(int i=1;i<=n;i++){
        cin>>x[i]>>y[i];
        v.pb(mp(x[i],y[i]));
    }
    dfs();
    cout<<"No";
    return 0;
}

WA 了 33 个点,不懂为什么?

2024/3/23 13:01
加载中...