摘要

题目链接 难度等级 完成状态 完成分数 最后编辑时间 失误原因(初次提交分数)
Kicker ★☆☆☆☆ 答案正确 100 2015-02-24 13:59:56 字母打反(2)

题意

2个队,每个队有两人,每个人有一个攻击值和防御值,A队先选择一个人攻击一个人防御,B队按照A队的选择进行最优选择,问最终胜利的是哪一队(或者无法得到确定结果)。

题解

枚举所有攻防组合,进行判断即可。细节比较恶心。

代码

411C.cpp代码已折叠
展开折叠内容
显示/移除行号
  1. #include<cstdio>
  2. #include<iostream>
  3. #include<string>
  4. #include<algorithm>
  5. #include<cstring>
  6. using namespace std;
  7. #define dsi(n) int n;scanf("%d",&n)
  8. #define si(n) scanf("%d",&n)
  9. #define f(i,n) for(int i=1;i<=n;++i)
  10. #define fi(n) f(i,n)
  11. #define f0(i,n) for(int i=0;i!=n;++i)
  12. #define fd(i,n) for(int i=n;i>=1;--i)
  13. #define ci const int&
  14. #define foreach(i,s) for(typeof(s.begin()) i=s.begin();i!=s.end();++i)
  15.  
  16. #define c(x) const x&
  17. class st
  18. {
  19. public:
  20. int a,d,t;
  21. // friend bool operator <(const st&a,const st&b){return a.x<b.x;}
  22. void init()
  23. {
  24. si(a);si(d);
  25. }
  26. } B[5];
  27. int isWin(const st&a,const st&b)//a attack b defense
  28. {
  29. if(a.a>b.d)return a.t;
  30. if(a.a<b.d)return b.t;
  31. return 0;
  32. }
  33. int isTeamWin(ci _a,ci _b,ci _c,ci _d)//a attack b defense,c attack d defense
  34. {
  35. st a=B[_a],b=B[_b],c=B[_c],d=B[_d];
  36. int t1=isWin(a,d),t2=isWin(c,b);
  37. if(t1&&t1==t2)return t1;
  38. return 0;
  39. }
  40. int main()
  41. {
  42.  
  43. fi(4)
  44. B[i].init(),
  45. B[i].t=(i<=2?1:2);
  46. int k1=isTeamWin(1,2,3,4),
  47. k2=isTeamWin(2,1,3,4),
  48. k3=isTeamWin(1,2,4,3),
  49. k4=isTeamWin(2,1,4,3);
  50. // cout<<isWin(B[4],B[2])<<B[4].t<<B[2].t;
  51. // cout<<k1<<" "<<k2<<" "<<k3<<" "<<k4<<endl;
  52. if((k1==k3&&k1==1)||(k2==k4&&k2==1))
  53. {
  54. cout<<"Team 1"<<endl;
  55. return 0;
  56. }
  57. if((!k1&&k3==1)||(!k1&&!k3)||(!k3&&k1==1)||(!k2&&k4==1)||(!k2&&!k4)||(!k4&&k2==1))//fixed:k4,k2打反了//
  58. {
  59. cout<<"Draw"<<endl;
  60. return 0;
  61. }
  62. cout<<"Team 2"<<endl;
  63. return 0;
  64. }

著作权声明[编辑]

关于[编辑]