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 ...
随机推荐
- Bundle、Intent、SharedPreferences
Intent与Bundle的共同点:都继承Parcelable Intent传值与Bundle传值的区别 eg:我现在要从A界面 跳转到B界面或者C界面 这样的话 我就需要写2个Intent ...
- 例题6-7 Trees on the level ,Uva122
本题考查点有以下几个: 对数据输入的熟练掌握 二叉树的建立 二叉树的宽度优先遍历 首先,特别提一下第一点,整个题目有相当一部分耗时在了第一个考查点上(虽然有些不必要,因为本应该有更简单的方法).这道题 ...
- rinetd 安装使用
1 下载解压: wget http://www.boutell.com/rinetd/http/rinetd.tar.gz tar zxvf rinetd.tar.gz 2 手动建立目录 mkdir ...
- eclipse,myeclipse svn 和jadclipse 反编译插件 及安装
插件下载链接:http://download.csdn.net/download/mmyzlinyingjie/6456785 myeclipse svn 安装: 把svn解压,然后把这个文件夹放在m ...
- 第一次比赛的 C题 (好后面才补的....) CodeForces 546B
Description Colonel has n badges. He wants to give one badge to every of his n soldiers. Each badge ...
- Jira 6.0.3 安装与破解
如果你还没有使用Jira做项目跟踪与管理,那就赶紧试用一下吧.下面教你一步一步安装Jira 6.0.3,以及如何破解试用版. 一. 安装准备 1. 去Jira官方网站下载http://www.at ...
- JAVA类与对象(二)----类定义基础
类是组成java程序的基本要素,是java中的一种重要的复合数据类型.它封装了一类对象的状态和方法,是这一类对象的原型.一个类的实现包括两个部分:类声明和类体,基本格式: class <clas ...
- LintCode-Compare Strings
Compare two strings A and B, determine whether A contains all of the characters in B. The characters ...
- ?--Porg.springframework.beans.MethodInvocationException: Property 'username' threw exception; nested exception is java.lang.NullPointerException
使用BoneCP作为连接池,在启动Tomcat报出以下异常: 一月 02, 2016 2:12:17 下午 org.apache.tomcat.util.digester.SetPropertiesR ...
- BZOJ 4341 [CF253 Printer] 解题报告
乍一看这个题好像可以二分优先度搞搞... 实际上能不能这么搞呢...? 我反正不会... 于是开始讲我的乱搞算法: 首先肯定要把任务按照优先度排序. 用一棵在线建点的线段树维护一个时刻是否在工作. 然 ...