三中的一次普通测试(二)

题目描述

二、一起杀杀杀
南昌三中是一所百年名校,历史悠久,秉承勤朴忠勇校训,南昌三中校园风景美,
建筑物别致,有风雨球馆,体育馆,艺体楼,游泳馆等多个漂亮建筑物,有如此美
丽的校园,如此高智商的学生,现南昌三中决定组织一次课外活动,丰富学生的课余生活,名字为一起杀杀杀,现报名的玩家共有n个,每人需要4张牌
牌库共k张牌,需洗牌后再发
每张牌有以下属性
Type :基础(杀K闪M桃P酒W),
非延时锦囊(决斗B万箭A南蛮S五谷C桃园G拆D顺U铁索T无懈N火攻F无中E),
延时锦囊(兵I乐H闪L),
马(+-),
武器(连弩LN青釭QG古锭GD寒冰HB雌雄CX吴六WL青龙QL丈八ZB贯石GS方天FT羽扇YS麒麟LG),
防具(仁王RW八阵BZ藤甲TJ狮子SZ)
Color :CHSD
Number :A23456789TJQK(T代表10,从小到大)
洗牌方式:k/2+1,1,k/2+2,2,k/2+3,3, ... ,k,k/2(可以有奇数张牌,最后一张牌将被无耻的裁判吃掉)
发牌方式:从第1张牌开始,第i张牌给第(i-1)%n+1个人
共洗m次牌,你是第p个人,问你得到了哪几张牌

输入格式

第一行4个整数n k m p (1<=n<=1000,1<=k<=100000,1<=m<=80,1<=p<=n)
以下k行每行说明牌堆里一张牌,第i+1行说明第i张牌
每行格式为:ColorNumber Type

输出格式

你得到的四张牌,按获得顺序,若牌数不够输出Error:cards not enough

输入样例

样例一

2 10 1 1
C2 K
H5 B
DT K
SA M
HQ P
D4 K
C6 P
H9 M
ST B
SK C

样例二

2 7 1 1
C2 K
H5 B
DT K
SA M
HQ P
SK C
C6 P

输出样例

样例一

D4 K
C6 P
H9 M
ST B

样例二

Error:cards not enough

题解

首先呢…
牌的花色啊,种类啊

都不用管 !!

所以嘞

这就是个模拟!!

上代码

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int n,m,k,p;
struct p{
   char kind[3];
   char color[3];
}a[100001],b[100001];
void washcard(){
   k/=2;
   int num=k;
   k*=2;
   for(int i=1;i<=num;i++){
      b[i*2]=a[i];
      b[i*2-1]=a[i+num];
   }
   for(int i=1;i<=k;i++){
      a[i]=b[i];
   }
   return ;
}
int main(){
   freopen("bao.in","r",stdin);
   freopen("bao.out","w",stdout);
   cin>>n>>k>>m>>p;
   for(int i=1;i<=k;i++){
      cin>>a[i].color>>a[i].kind;
   }
   for(int i=1;i<=m;i++){
      washcard();      //洗牌
   }
   if(k<4*n){
      cout<<"Error:cards not enough";
      return 0;
   }
   for(int i=0;i<=3;i++){
      int aa=i*n+p;        //p;n+p;2*n+p;3*n+p属于第p个人摸的牌
      cout<<a[aa].color<<" "<<a[aa].kind<<endl; 
   }
   return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值