tuple的使用例题(三元组)

题目大意:给一定关系,判断后面给的跟前面的有无矛盾

一开始还在想一些构造的操作,后面实在想不出来看题解,就是暴力啊......

但是这种数据结构tuple(元组)确实是没见过,于是写篇总结

见这篇icon-default.png?t=N7T8https://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;
}

  • 33
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值