非官方题解 | 巅峰赛#37 T2
2026-08-17 14:07:33
发布于:天津
16阅读
0回复
0点赞
2.宝藏密码
思路:
合法解指的是非负的整数解(即 )。
- 如果只有1个方程,那么直接遍历6种排列求解。因为题目保证只有一个合法解。
- 如果有多个方程:
- 遍历第一个方程的6种情况
- 第一个方程如果出现了合法解,那么再去验证其他方程(每个方程须要验证6种排列),看看是不是通解
- 如果不是通解,那么再重解第一个方程。
- 最后通解就是最终答案
我的代码:
#include<iostream>
using namespace std;
typedef long long _;
struct funk{//一个方程有6种情况
_ a[7];
_ b[7];
_ c[7];
}fangcheng[100002];
bool z(long long a,long long b,long long c){//解是非负整数并且合法
if(a!=0)return (c-b)%a==0&&(c-b)/a>=0;
return 0;
}
int main(){
_ t;cin>>t;
while(t--){
_ n;cin>>n;
for(int i=1;i<=n;i++){
_ a,b,c;
cin>>a>>b>>c;
fangcheng[i].a[1]=a;fangcheng[i].a[2]=a;//傻子式生成6种排列(如果比赛了真不会可以这么做)
fangcheng[i].a[3]=b;fangcheng[i].a[4]=b;
fangcheng[i].a[5]=c;fangcheng[i].a[6]=c;
fangcheng[i].b[1]=b;fangcheng[i].b[2]=c;
fangcheng[i].b[3]=a;fangcheng[i].b[4]=c;
fangcheng[i].b[5]=a;fangcheng[i].b[6]=b;
fangcheng[i].c[1]=c;fangcheng[i].c[2]=b;
fangcheng[i].c[3]=c;fangcheng[i].c[4]=a;
fangcheng[i].c[5]=b;fangcheng[i].c[6]=a;
}
_ ans=0;
if(n==1){
for(int j=1;j<=6;j++){
_ a=fangcheng[1].a[j];
_ b=fangcheng[1].b[j];
_ c=fangcheng[1].c[j];
if(z(a,b,c)){
ans=(c-b)/a;
break;
}
}
}
else if(n>1){
for(int q=1;q<=6;q++){//先解第一个方程
_ a=fangcheng[1].a[q];
_ b=fangcheng[1].b[q];
_ c=fangcheng[1].c[q];
if(z(a,b,c)){//出现合法解
_ jietmp=(c-b)/a;
for(int i=2;i<=n;i++){//解其他方程
bool v=0;
for(int j=1;j<=6;j++){
_ aa=fangcheng[i].a[j];
_ bb=fangcheng[i].b[j];
_ cc=fangcheng[i].c[j];
if(z(aa,bb,cc)&&(cc-bb)/aa==jietmp){
ans=(cc-bb)/aa;
v=1;
break;
}
}
if(!v){//没找到通解,退出,解第一个方程的其他解
break;
}
}
}
}
}
cout<<ans<<endl;
}
return 0;
}
这里空空如也





有帮助,赞一个