| 题目链接 | 难度等级 | 完成状态 | 完成分数 | 最后编辑时间 | 失误原因(初次提交分数) |
|---|---|---|---|---|---|
| Kicker | ★☆☆☆☆ | 答案正确 | 100 | 2015-02-24 13:59:56 | 字母打反(2) |
2个队,每个队有两人,每个人有一个攻击值和防御值,A队先选择一个人攻击一个人防御,B队按照A队的选择进行最优选择,问最终胜利的是哪一队(或者无法得到确定结果)。
枚举所有攻防组合,进行判断即可。细节比较恶心。
| 411C.cpp代码已折叠
展开折叠内容
|
|---|
#include<cstdio>
#include<iostream>
#include<string>
#include<algorithm>
#include<cstring>
using namespace std;
#define dsi(n) int n;scanf("%d",&n)
#define si(n) scanf("%d",&n)
#define f(i,n) for(int i=1;i<=n;++i)
#define fi(n) f(i,n)
#define f0(i,n) for(int i=0;i!=n;++i)
#define fd(i,n) for(int i=n;i>=1;--i)
#define ci const int&
#define foreach(i,s) for(typeof(s.begin()) i=s.begin();i!=s.end();++i)
#define c(x) const x&
class st
{
public:
int a,d,t;
// friend bool operator <(const st&a,const st&b){return a.x<b.x;}
void init()
{
si(a);si(d);
}
} B[5];
int isWin(const st&a,const st&b)//a attack b defense
{
if(a.a>b.d)return a.t;
if(a.a<b.d)return b.t;
return 0;
}
int isTeamWin(ci _a,ci _b,ci _c,ci _d)//a attack b defense,c attack d defense
{
st a=B[_a],b=B[_b],c=B[_c],d=B[_d];
int t1=isWin(a,d),t2=isWin(c,b);
if(t1&&t1==t2)return t1;
return 0;
}
int main()
{
fi(4)
B[i].init(),
B[i].t=(i<=2?1:2);
int k1=isTeamWin(1,2,3,4),
k2=isTeamWin(2,1,3,4),
k3=isTeamWin(1,2,4,3),
k4=isTeamWin(2,1,4,3);
// cout<<isWin(B[4],B[2])<<B[4].t<<B[2].t;
// cout<<k1<<" "<<k2<<" "<<k3<<" "<<k4<<endl;
if((k1==k3&&k1==1)||(k2==k4&&k2==1))
{
cout<<"Team 1"<<endl;
return 0;
}
if((!k1&&k3==1)||(!k1&&!k3)||(!k3&&k1==1)||(!k2&&k4==1)||(!k2&&!k4)||(!k4&&k2==1))//fixed:k4,k2打反了//
{
cout<<"Draw"<<endl;
return 0;
}
cout<<"Team 2"<<endl;
return 0;
}
|