题目大意:给一定关系,判断后面给的跟前面的有无矛盾
一开始还在想一些构造的操作,后面实在想不出来看题解,就是暴力啊......
但是这种数据结构tuple(元组)确实是没见过,于是写篇总结
见这篇https://blog.csdn.net/qq_42759112/article/details/125252105?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170799131916800226542571%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=170799131916800226542571&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_click~default-2-125252105-null-null.142^v99^pc_search_result_base2&utm_term=tuple&spm=1018.2226.3001.4187
#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
int _;
int n;int a[4];
int i,j,k;
vector<tuple<int,int,int>> v; //以tuple数据类型开bool check(){for(auto [x,y,w]:v){ //三元组以上就只能用中括号了if(w==1){if(a[x]<a[y])continue;else return 0;}else{if(a[x]>=a[y])continue;else return 0;}}return 1;
}
signed main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);cin>>_;while(_--){cin>>n;v.clear();//这里不能用fill,除非前面给vector开了大小,这里耗费我了不少时间for(int b=1;b<=n;++b){cin>>i>>j>>k;v.push_back({i,j,k});//三元组的插入还是{},如果是插入,前面的vector就不能决定范围了}int res=0;for(i=1;i<=3;++i){//暴力枚举27种情况,看看有没有能满足给的上面情况的for(j=1;j<=3;++j){for(k=1;k<=3;++k){a[1]=i;a[2]=j;a[3]=k;res|=check();//这里巧用了一个| 这样一来,只要右边出现一次1,就会一直是1了(数据类型小)}}}if(res) cout<<"Yes"<<endl;else cout<<"No"<<endl;}return 0;
}