不是,这sj在抽什么风
查看原帖
不是,这sj在抽什么风
691463
somebody_kang楼主2024/4/29 13:17

rt,我WA#7,把数据下载下来本地跑出来跟答案一模一样,不知道为什么不给我过,整无语了 以下是代码,有没有大佬为我指点一二

#7输入:4 4 4 6

输出:

4+4=8

8-4=4

6*4=24

#include<bits/stdc++.h>
using namespace std;
vector<char> op;
int v[10][10],a,b,c,d;
bool vis[10][10];
bool bingo=0,sp=0;
void dfs(int n){
	if(bingo) return;
	if(n==4){
		/*if(v[1][1]==9&&v[2][1]==7&&v[3][1]==7&&v[4][1]==5&&v[2][3]!=v[3][2]){
			for(int i=1;i<=4;++i){
				for(int j=1;j<=4;++j){
					cout<<v[j][i]<<" ";
				}
				cout<<endl;
			}
		}*/
		if(v[1][4]==24) bingo=1;
		return;
	}
	op.push_back('+');
	v[1][n+1]=v[1][n]+v[2][n];
	v[2][n+1]=v[3][n];v[3][n+1]=v[4][n];
	dfs(n+1);
	if(bingo) return;
	op.pop_back();
	
	if(n==2){
		sp=1;
		op.push_back('+');
		v[2][n+1]=v[2][n]+v[3][n];
		v[1][n+1]=v[1][n];
		dfs(n+1);
		if(bingo) return;
		op.pop_back();
	
		if(v[2][n]>v[3][n]){
			op.push_back('-');
		v[2][n+1]=v[2][n]-v[3][n];
		v[1][n+1]=v[1][n];
		dfs(n+1);
		if(bingo) return;
		op.pop_back();
		}
		
		op.push_back('*');
		v[2][n+1]=v[2][n]*v[3][n];
		v[1][n+1]=v[1][n];
		dfs(n+1);
		if(bingo) return;
		op.pop_back();
		
		if(v[2][n]==0||double(v[1][n])/double(v[2][n])!=v[1][n]/v[2][n]) return;
		op.push_back('/');
		v[2][n+1]=v[2][n]/v[3][n];
		v[1][n+1]=v[1][n];
		dfs(n+1);
		if(bingo) return;
		op.pop_back();
		
		sp=0;
	}
	
	if(v[1][n]>v[2][n]){
		op.push_back('-');
		v[1][n+1]=v[1][n]-v[2][n];
		v[2][n+1]=v[3][n];v[3][n+1]=v[4][n];
		dfs(n+1);
		if(bingo) return;
		op.pop_back();
	}
	
	if(n==2){
		sp=1;
		op.push_back('+');
		v[2][n+1]=v[2][n]+v[3][n];
		v[1][n+1]=v[1][n];
		dfs(n+1);
		if(bingo) return;
		op.pop_back();
	
		if(v[2][n]>v[3][n]){
			op.push_back('-');
		v[2][n+1]=v[2][n]-v[3][n];
		v[1][n+1]=v[1][n];
		dfs(n+1);
		if(bingo) return;
		op.pop_back();
		}
		
		op.push_back('*');
		v[2][n+1]=v[2][n]*v[3][n];
		v[1][n+1]=v[1][n];
		dfs(n+1);
		if(bingo) return;
		op.pop_back();
		
		if(v[2][n]==0||double(v[1][n])/double(v[2][n])!=v[1][n]/v[2][n]) return;
		op.push_back('/');
		v[2][n+1]=v[2][n]/v[3][n];
		v[1][n+1]=v[1][n];
		dfs(n+1);
		if(bingo) return;
		op.pop_back();
		
		sp=0;
	}
	
	op.push_back('*');
	v[1][n+1]=v[1][n]*v[2][n];
	v[2][n+1]=v[3][n];v[3][n+1]=v[4][n];
	dfs(n+1);
	if(bingo) return;
	op.pop_back();
	
	if(v[2][n]==0||double(v[1][n])/double(v[2][n])!=v[1][n]/v[2][n]) return;
	op.push_back('/');
	v[1][n+1]=v[1][n]/v[2][n];
	v[2][n+1]=v[3][n];v[3][n+1]=v[4][n];
	dfs(n+1);
	if(bingo) return;
	op.pop_back();
	
	if(n==2){
		sp=1;
		op.push_back('+');
		v[2][n+1]=v[2][n]+v[3][n];
		v[1][n+1]=v[1][n];
		dfs(n+1);
		if(bingo) return;
		op.pop_back();
	
		if(v[2][n]>v[3][n]){
			op.push_back('-');
		v[2][n+1]=v[2][n]-v[3][n];
		v[1][n+1]=v[1][n];
		dfs(n+1);
		if(bingo) return;
		op.pop_back();
		}
		
		op.push_back('*');
		v[2][n+1]=v[2][n]*v[3][n];
		v[1][n+1]=v[1][n];
		dfs(n+1);
		if(bingo) return;
		op.pop_back();
		
		if(v[2][n]==0||double(v[1][n])/double(v[2][n])!=v[1][n]/v[2][n]) return;
		op.push_back('/');
		v[2][n+1]=v[2][n]/v[3][n];
		v[1][n+1]=v[1][n];
		dfs(n+1);
		if(bingo) return;
		op.pop_back();
		
		sp=0;
	}
}
int main(){
	cin>>a>>b>>c>>d;
	int T=514541;
	while(T--){
		srand(rand());
		int i=rand()%4+1,j=rand()%4+1;
		if(i==j) continue;
		//if(vis[i][j]) continue;
		vis[i][j]=1;
		for(int i=2;i<=4;++i)
			for(int j=1;j<=4;++j)
				v[j][i]=0;
		v[1][1]=a,v[2][1]=b,v[3][1]=c,v[4][1]=d;
		swap(v[i][1],v[j][1]);
		dfs(1);
		if(bingo) break;
		i=rand()%4+1,j=rand()%4+1;
		if(i==j) continue;
		//if(vis[i][j]) continue;
		vis[i][j]=1;
		for(int i=2;i<=4;++i)
			for(int j=1;j<=4;++j)
				v[j][i]=0;
		op.clear();
		swap(v[i][1],v[j][1]);
		dfs(1);
		if(bingo) break;
	}
	if(!bingo){
		cout<<"No answer!";return 0;
	}
	if(!sp){
		///cout<<"sp";
		if((op[0]=='+'||op[0]=='*')&&v[1][1]<v[2][1]) swap(v[1][1],v[2][1]);
		cout<<v[1][1]<<op[0]<<v[2][1]<<'='<<v[1][2]<<endl;
		if((op[1]=='+'||op[1]=='*')&&v[1][2]<v[2][2]) swap(v[1][2],v[2][2]);
		cout<<v[1][2]<<op[1]<<v[2][2]<<'='<<v[1][3]<<endl;
		if((op[2]=='+'||op[2]=='*')&&v[1][3]<v[2][3]) swap(v[1][3],v[2][3]);
		cout<<v[1][3]<<op[2]<<v[2][3]<<'='<<v[1][4]<<endl;
	}
	else{
		if((op[0]=='+'||op[0]=='*')&&v[1][1]<v[2][1]) swap(v[1][1],v[2][1]);
		cout<<v[1][1]<<op[0]<<v[2][1]<<'='<<v[1][2]<<endl;
		if((op[1]=='+'||op[1]=='*')&&v[2][2]<v[3][2]) swap(v[2][2],v[3][2]);
		cout<<v[2][2]<<op[1]<<v[3][2]<<'='<<v[2][3]<<endl;
		if((op[2]=='+'||op[2]=='*')&&v[1][3]<v[2][3]) swap(v[1][3],v[2][3]);
		cout<<v[1][3]<<op[2]<<v[2][3]<<'='<<v[1][4]<<endl;
	}
	return 0;
}
2024/4/29 13:17
加载中...