【打扑克 421】

打扑克

时间限制: 1000 ms  |  内存限制: 65535 KB
难度: 2
描述
       最近zmh喜欢上了打扑克,有一天他又找同学打扑克规则如下:2人各有m张牌轮流出牌(打出的牌不归任何人所有), 遇到出的牌和前面有相同,则这之间的排归出牌人,收回牌不打出 ,zmh先出牌,最后拥有牌多者赢(牌数相等也是zmh赢),聪明的zmh知道了两人牌排列的顺序,他想知道自己能不能赢,可他现在有事,你能帮他吗?
输入
第一行为整数n(n<=200)(n组测试数据)
第二行为整数m(0<=m<=5000),表示二人拥有的牌数,首先给出zmh的牌,有m个整数,第i个整数pi(0<=pi<=10000)表示zmh第i张牌的编号,其次以同样的方式给出zmh的同学的牌
输出
如果能赢,输出Yes 
不能则输出No
样例输入
2
4
1 2 3 4
1 2 3 4
4
4 3 2 1
1 2 3 4

样例输出
No
Yes
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int c[1000000];//记录标记。
int main(){
	int m,i,count,numa,numb,*a,*b,*d,n,h,x,j;
	scanf("%d",&n);
	while(n--){
		memset(c,0,sizeof(c));
		scanf("%d",&m);
		a=(int*)malloc(m*sizeof(int));
		b=(int*)malloc(m*sizeof(int));//
		d=(int*)malloc(2*m*sizeof(int));//记录牌的值。
		for(i=0;i<m;i++)
			scanf("%d",&a[i]);
		for(i=0;i<m;i++)
			scanf("%d",&b[i]);
		h=0;
		count=0;
		numa=0;
		numb=0;
		for(i=0;i<m;i++){

		if(c[a[i]]){//如果有相同的
			for(j=0;j<h;j++){
				if(a[i]==d[j]){
					 	numa+=(count-j+1);// 赢得牌的个数
						
						break;
				}
			}
		
			count=j;
			for(x=j;x<h;x++)
				c[d[x]]=0;
			h=j;
		}		
		else{
			c[a[i]]=1;
			d[h++]=a[i];
			count++;
		}
		if(c[b[i]]){
			for(j=0;j<h;j++){
				if(b[i]==d[j]){
					 	numb+=(count-j+1);
					
						break;
				}
			}
			count=j;
			for(x=j;x<h;x++)
				c[d[x]]=0;
			h=j;
		}
			
		else{
			c[b[i]]=1;
			count++;
			d[h++]=b[i];
		}
		}
	
		if(numa>=numb)
			printf("Yes\n");
		else
			printf("No\n");
	}
	}

开辟一个数组,用0,1.来记录前边是否出现过这个值。

开辟一个数组,用来记录前边已经出现的每一个数值。

然后记录出现的个数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

paidream

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值