P6458 [COCI2006-2007#5] LIGA

题目链接:这里

思路

首先以string类型输入,然后判断是不是问号来储存为int类型,之后就可以想怎么求出?位置的数了
一开始的想法就是直接列举所有的情况,然后发现才得20分(挺高的
然后就发现了原来用胜利的场数,平局的场数和输的场数就可以把所有数据都表示出来,哦搜嘎,然后就发现可以直接枚举这些数然后判断合不合法就好了,我真是个小**

代码

#include<bits/stdc++.h>
using namespace std;
const int N=1010;
int n;
int a[10],ans[N][10];
void solve(int x){
	for (int i=0;i<=100;i++){
		for (int j=0;j<=100-i;j++){
			for (int k=0;k<=100-i-j;k++){
				if ((a[1]==-1||a[1]==i+j+k)&&(a[2]==-1||a[2]==i)&&(a[3]==-1||a[3]==j)&&(a[4]==-1||a[4]==k)&&(a[5]==-1||a[5]==3*i+j)){
					ans[x][1]=i+j+k,ans[x][2]=i,ans[x][3]=j,ans[x][4]=k,ans[x][5]=3*i+j;
				}
			}
		}	
	}
}
int main(){
	cin>>n;
	for (int i=1;i<=n;i++){
		string all,win,pea,los,sco;
		int aa=-1,b=-1,c=-1,d=-1,e=-1;
		cin>>all>>win>>pea>>los>>sco;
		if (all[0]!='?'){
			aa=0;
			for (int i=0;i<all.size();i++){
				aa=aa*10+all[i]-'0';
			}
		}
		if (win[0]!='?'){
			b=0;
			for (int i=0;i<win.size();i++){
				b=b*10+win[i]-'0';
			}
		}
		if (pea[0]!='?'){
			c=0;
			for (int i=0;i<pea.size();i++){
				c=c*10+pea[i]-'0';
			}
		}
		if (los[0]!='?'){
			d=0;
			for (int i=0;i<los.size();i++){
				d=d*10+los[i]-'0';
			}
		}
		if (sco[0]!='?'){
			e=0;
			for (int i=0;i<sco.size();i++){
				e=e*10+sco[i]-'0';
			}
		}
		a[1]=aa,a[2]=b,a[3]=c,a[4]=d,a[5]=e;
		solve(i);
	}
	for (int i=1;i<=n;i++){
		for (int j=1;j<=5;j++){
			cout<<ans[i][j]<<" ";
		}
		cout<<"\n";
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值