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