zoukankan      html  css  js  c++  java
  • 【CodeForces

    Soldier and Cards

    老样子,直接上国语吧

     Descriptions:

    两个人打牌,从自己的手牌中抽出最上面的一张比较大小,大的一方可以拿对方的手牌以及自己打掉的手牌重新作为自己的牌,放在自己手牌的最下方,而且对方输掉的那张手牌需要放在上面,自己赢的手牌放在下面。

    Input

    第一行的数n代表一共有几张牌

    第二行第一个数x代表第一个人有x张牌

    第三行第一个数y代表第二个人有y张牌

    Output

    第一个数代表进行了几轮,第二个数代表谁赢

    Examples

    Input
    4
    2 1 3
    2 4 2
    Output
    6 2
    Input
    3
    1 2
    2 1 3
    Output
    -1

    题目链接:

    https://vjudge.net/problem/CodeForces-546C

    我的做法可能有点偏了,因为不知道有几个牌,就用vector存一下,然后每次拿出双方的第一张牌进行比较,再进行模拟,现在想想可以用queue来写,当时写的有点粗糙,但是思路很清晰,一遍就AC了

    AC代码

    #include <iostream>
    #include <cstdio>
    #include <fstream>
    #include <deque>
    #include <vector>
    #include <queue>
    #include <string>
    #include <cstring>
    #include <map>
    #include <stack>
    #include <set>
    #include <sstream>
    #define mod 1000000007
    #define ll long long
    #define INF 0x3f3f3f3f
    using namespace std;
    vector<int>a;
    vector<int>b;
    int n;
    int f,flag=1;
    int x,y;
    int sum=0;
    int main()
    {
        cin >> n;
        cin >> x;
        for(int i=0; i<x; i++)
        {
            int num;
            cin>>num;
            a.push_back(num);
        }
        cin>>y;
        for(int i=0; i<y; i++)
        {
            int num;
            cin>> num;
            b.push_back(num);
        }
        while(!a.empty()&&!b.empty())//两人的卡牌都不为空
        {
            sum++;
            int num1=a.front();//都取出第一张卡牌进行比较
            int num2=b.front();
            if(num1>num2)//1号大于2号就把2号和自己的卡牌一次放在队尾
            {
                a.push_back(num2);
                a.push_back(num1);
                vector<int>::iterator t1=a.begin();
                vector<int>::iterator t2=b.begin();
                a.erase(t1);
                b.erase(t2);
            }
            if(num2>num1)//2号大于1号就把1号和自己的卡牌一次放在队尾
            {
                b.push_back(num1);
                b.push_back(num2);
                vector<int>::iterator t1=a.begin();
                vector<int>::iterator t2=b.begin();
                a.erase(t1);
                b.erase(t2);
            }
            if(!b.empty())//谁的卡牌为空谁就输了
                f=2;
            if(!a.empty())
                f=1;
            if(sum>=n*n*n*n*n*n)//判断一下,要是循环这么多次还没分出胜负,应该就是死循环了
            {
                flag=0;
                cout<<"-1"<<endl;
                break;
            }
        }
        if(flag)
        cout<<sum<<" "<<f<<endl;
        return 0;
    }
  • 相关阅读:
    Java高并发学习笔记(四):volatile关键字
    Java高并发学习笔记(三):类加载
    Java高并发学习笔记(二):线程安全与ThreadGroup
    解决druid在OpenJDK11+Gradle中的依赖问题
    解决AUR无法正常升级WebStorm2021.1.1的问题
    论软件体系架构之质量属性
    以《淘宝网》为例,描绘质量属性的六个常见属性场景
    软件架构师如何工作
    泰坦尼克号数据分析
    当当网图书数据爬取和清洗
  • 原文地址:https://www.cnblogs.com/sky-stars/p/10994998.html
Copyright © 2011-2022 走看看