摘要

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

著作权声明[编辑]

关于[编辑]