题目链接 | 难度等级 | 完成状态 | 完成分数 | 最后编辑时间 | 失误原因(初次提交分数) |
---|---|---|---|---|---|
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; } |