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 ...
随机推荐
- Winform合并多个Excel文件到一个文件中(源文件.xls,实际是.xml)
1.下面两个文件.xls是给的文件,实际上是.xml文件 2.具体的代码 private void btOK_Click(object sender, EventArgs e) { //0.获取路径文 ...
- setLayoutParams设置leftMargin后在模拟器上可以真机上不行
LinearLayout.LayoutParams lp = getLayoutParamsFromExit( (LayoutParams) this.getLayoutParams()); ...
- linux服务器git pull/push时提示输入账号密码之免除设置
1.先cd到根目录,执行git config --global credential.helper store命令 [root@iZ25mi9h7ayZ ~]# git config --global ...
- Cookie 的运行机制以及常用规则
一 setCookie bool setcookie ( string name [, string value [, int expire [, string path [, st ...
- DBCC Check
DBCC CHECKDB 可以完成两个任务 (1)检查数据库里有没有损坏发生 (2)尽力修复数据库损坏,是数据能重新被正常访问 DBCC 下列步骤执行下列操作 1.检查一些关键性的表 sysalocu ...
- OpenNMS架构介绍
一.OpenNMS简介 OpenNMS的开发基于TMN及FCAPS这两个模型. 电信管理网络(TMN)是由 ITU-T 推荐 M.3000于1985年提出作为一种应用于电信服务供应商所持有的运营支持系 ...
- Oracle重建表索引及手工收集统计信息
Oracle重建所有表的索引的sql: SELECT 'alter index ' || INDEX_NAME || ' rebuild online nologging;' FROM USER_IN ...
- Protocol Buffer使用
Protocol Buffer使用简介 字数2630 阅读5067 评论1 喜欢12 我们项目中使用protocol buffer来进行服务器和客户端的消息交互,服务器使用C++,所以本文主要描述pr ...
- 【nodejs】 npm 注意事项
官网:https://www.npmjs.com/ 1.安装时要切换到nodejs根目录, 否则就会安装到安装时所在的目录 2.要有管理员权限(win),如需指定版本,如npm install ex ...
- iOS学习笔记之typedef
typedef unsigned long long weiboId; typedef 定义一个使用方便的类型,谓之为“宏定义“. unsigned long long 是一种无符号的长长整型.本应该 ...