546C. Soldier and Cards
题意
两个人玩扑克,共n张牌,第一个人k1张,第二个人k2张
给定输入的牌的顺序就是出牌的顺序
每次分别比较两个人牌的第一张,牌上面数字大的赢,把这两张牌给赢的人,并且大的牌放在这个人的牌最下面,另外一张放在上面牌的上面,其他牌在放在这两张牌的上面。
求要pk多少次结束游戏,并记录赢得是哪个人
若出现死循环的情况输出 –1
这里可以根据栈或队列
java的程序是根据栈的,比较时候取出栈顶,加入新的两个 数的时候,要先出栈,在入栈,有点麻烦
Python程序是根据队列,在头取出进行比较,加入时候再队尾加入元素,不会出现过度的入栈和出栈的操作
Java 的有增加了队列实现
ArrayList可实现队列的功能,比较简单了
Java程序
import java.awt.List;
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.Stack; public class C546 {
static void run1(){
Scanner in =new Scanner(System.in);
PrintStream out = System.out;
int n = in.nextInt();
int Maxtime =1000;
ArrayList<Integer> l1 = new ArrayList<Integer>();
ArrayList<Integer> l2 = new ArrayList<Integer>();
int k1 = in.nextInt();
for(int i=1;i<=k1;i++) l1.add(in.nextInt());
int k2 = in.nextInt();
for(int i=1;i<=k2;i++) l2.add(in.nextInt());
int count =0;
while(l1.size()>0 && l2.size()>0 &&Maxtime>0){
count++;
Maxtime--;
int q1 = l1.get(0);
int q2 = l2.get(0);
l1.remove(0);
l2.remove(0);
if(q1> q2){
l1.add(q2);
l1.add(q1);
}else{
l2.add(q1);
l2.add(q2);
}
}
if(Maxtime==0)
out.println(-1);
else
out.println(count+" "+(l1.size()>0?1:2));
}
static void run(){
Scanner in = new Scanner(System.in);
PrintStream out = System.out;
int n = in.nextInt();
int k1 = in.nextInt();
Stack s1 = new Stack();
Stack s2 = new Stack();
int[] a1 = new int[k1];
for(int i=0;i<k1;i++)
a1[i] = in.nextInt();
int k2 = in.nextInt();
int[] a2 = new int[k2];
for(int i=0;i<k2;i++){
a2[i] = in.nextInt();
}
for(int i=k1-1;i>=0;i--)
s1.push(a1[i]);
for(int i=k2-1;i>=0;i--)
{s2.push(a2[i]);
}
int Maxtime = 10000;
int count = 0;
boolean flag = false;
while(! s1.isEmpty() && ! s2.isEmpty() && Maxtime>0){
int p1 = (Integer) s1.pop();
int p2 = (Integer) s2.pop();
if(p1<p2){
int[] a3 = new int[s2.size()+2]; for(int i=0;i<a3.length-2;i++)
a3[i] = (Integer) s2.pop();
a3[a3.length-2] = p1;
a3[a3.length-1] = p2;// max
for(int i= a3.length-1;i>=0;i--)
{
s2.add(a3[i]);
}
count++;
}else{
int[] a4 = new int[s1.size()+2]; for(int i=0;i<a4.length-2;i++)
a4[i] = (Integer) s1.pop();
a4[a4.length-2] = p2;
a4[a4.length-1] = p1; // max
for(int i= a4.length-1;i>=0;i--)
s1.add(a4[i]);
count++;
}
Maxtime--; }
if(Maxtime==0)
System.out.println(-1);
else if(s1.isEmpty())
System.out.println(count+" "+2);
else
out.println(count+" "+ 1);
}
public static void main(String[] args){
// run(); run1();
}
}
Python 程序
def C546():
n = int(raw_input())
l=lambda:map(int,raw_input().split())
a = l()[1:]
b = l()[1:]
c = 0
R = set()
while a and b:
c +=1
A = a.pop(0)
B = b.pop(0)
if A > B:
a+=[B,A]
else:
b+=[A,B]
r =(tuple(a),tuple(b))
if r in R :
print -1
exit(0)
R.add(r)
print c, 1 if a else 2
if __name__=='__main__':
#A546()
#B546()
C546()
546C. Soldier and Cards的更多相关文章
- cf 546C Soldier and Cards
题目链接:C. Soldier and Cards Two bored soldiers are playing card war. Their card deck consists of exact ...
- 【CodeForces - 546C】Soldier and Cards (vector或队列)
Soldier and Cards 老样子,直接上国语吧 Descriptions: 两个人打牌,从自己的手牌中抽出最上面的一张比较大小,大的一方可以拿对方的手牌以及自己打掉的手牌重新作为自己的牌, ...
- 【codeforces 546C】Soldier and Cards
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- 队列 Soldier and Cards
Soldier and Cards 题目: Description Two bored soldiers are playing card war. Their card deck consists ...
- CF Soldier and Cards (模拟)
Soldier and Cards time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...
- Codeforces Round #304 (Div. 2) C. Soldier and Cards 水题
C. Soldier and Cards Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/546 ...
- Codeforces Round #304 (Div. 2) C. Soldier and Cards —— 模拟题,队列
题目链接:http://codeforces.com/problemset/problem/546/C 题解: 用两个队列模拟过程就可以了. 特殊的地方是:1.如果等大,那么两张牌都丢弃 : 2.如果 ...
- C - Soldier and Cards
Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u Description Two bo ...
- queue+模拟 Codeforces Round #304 (Div. 2) C. Soldier and Cards
题目传送门 /* 题意:两堆牌,每次拿出上面的牌做比较,大的一方收走两张牌,直到一方没有牌 queue容器:模拟上述过程,当次数达到最大值时判断为-1 */ #include <cstdio&g ...
随机推荐
- 简单实用的PHP验证码类
一个简单实用的php验证码类,分享出来 ,供大家参考. 代码如下: <?php /** @ php 验证码类 @ http://www.jbxue.com */ Class code { var ...
- WordPress 主题开发 - (一) 前言 待翻译
原文出自: http://themeshaper.com/2012/10/22/the-themeshaper-wordpress-theme-tutorial-2nd-edition/ THE TH ...
- Swift初步介绍
Swift是本届WWDC大会苹果推出的一门新开发语言,开发者网站上已经放出了这门新语言的介绍.教程和手册,如果手里有一台iOS设备的话,通过苹果的iBooks应用,从它的官方书店里搜索Swift,可以 ...
- MongoDB Long/Int(长整型)的自增长主键 解决方案
今朝有幸尝芒果,发现自增长ID类型有多种,唯独没有Long/Int. 一思路:1. 自建一个Collection(表,假设名为:IdentityEntity,其中字段:_id, Key, Value, ...
- selenium+python 浏览器标签页跳转 switch_to_window
浏览器页面跳转方法记录: from selenium import webdriver import time browser = webdriver.Chrome() first_url='http ...
- 安装360后,visual studio 经常报各种莫名其妙的错误的解决方案
安装360后,visual studio 经常报各种莫名其妙的错误,每次都要查找错误的解决方案 而且网上关于这个的好少,以后只要碰到了这种情况我就记录下吧 今天碰到的情况是打开WCF服务时出现 ...
- C# 生成简单验证码
网站登录总是会用到验证码,生成验证码对于C#来说很简单.因为有专门封装好的GDI+类可以直接调用使用具体代码如下 using System; using System.Collections.Gene ...
- QQ群里收集的外企iOS开发的笔试题
一组外企iOS开发的笔试题,您能回答出来吗?从群里收集来的. 1 why can't NSArray contain NSInteger Instance? with which extra step ...
- 0x03伪指令
等号伪指令 = 相当于指定常量,由等号定义的符号常量不占用存储空间. count = 1234 可以重复定义多次,EQU则不容许 EQU伪指令 1.常量名 EQU 表达式 NUMBER EQU 10* ...
- 客户端通过spice-gtk实现USB重定向
1.安装必要的工具: sudo apt-get install build-essential autoconf git-core intltool 2.安装必要的依赖包: -dev libxfixe ...