题目描述
二、一起杀杀杀
南昌三中是一所百年名校,历史悠久,秉承勤朴忠勇校训,南昌三中校园风景美,
建筑物别致,有风雨球馆,体育馆,艺体楼,游泳馆等多个漂亮建筑物,有如此美
丽的校园,如此高智商的学生,现南昌三中决定组织一次课外活动,丰富学生的课余生活,名字为一起杀杀杀,现报名的玩家共有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;
}