POJ 2200 A Card Trick(模拟)
题意 : 一共52张牌(A, 2, 3, 4, 5, 6, 7, 8, 9, 10, J, Q, K)花色分别是C,D,H,S 。。。给助理5张牌,然后助理需要重新排一下次序,把第一张牌给观众,然后让魔术师根据一个规律对剩下的有一定次序的牌,能够猜出观众手里的牌是哪张。规律是:
- 记下剩下的四张牌里第一张的值和花色。
- 然后剩下三张,找出最小的那张(按值大小排,如果值一样大按照花色排序,花色的顺序是CDHS)所在的位置然后把这个位置的值加到原来记下的第一张牌的值上。
- 除了最小的那张,还有两张大的,如果这两张是有序的就把将第二步得到的值再加3.
- 所以观众手里的牌的值就是经过上述三步加起来的值,花色就是原来记下的第一张牌的花色。
比如说 4D 5H 10C 10D QH,助理需要按照5H QH 10D 10C 4D这个顺序,将5H给观众,然后将QH 10D 10C 4D给魔术师,因为魔术师手里第一张牌的花色是H,所以观众手里那张牌的花色是H,然后魔术师手里的第一张值是12,加上剩下的牌里最小的4D所在的位置3,是15,取完余就是2,然后因为10D和10C是无序的,所以要再加3,就是5,所以观众手里的牌是5H .
思路 : 这个题要猜的话不怎么好猜,所以就是两个循环枚举一下,然后再处理一下小细节什么的。取余那个地方有特例所以要注意
//POJ 2200
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm> using namespace std ; char str[][] ;
//char ch[5][4] ;
int e ;
struct node
{
int num ;
int flo ;
} a[],ch[] ; int cmp(struct node a,struct node b)
{
if(a.num == b.num)
return a.flo < b.flo ;
return a.num < b.num ;
}
void inv()
{
for(int j = ; j < ; j++)
{
int len = strlen(str[j]) ;
if(len == ) a[j].num = ;
if(str[j][] == 'J') a[j].num = ;
else if(str[j][] == 'Q') a[j].num = ;
else if(str[j][] == 'K') a[j].num = ;
else if(str[j][] == 'A') a[j].num = ;
else if(str[j][] >= '' && str[j][] <= '') a[j].num = str[j][]-'' ;
if(str[j][len-] == 'C') a[j].flo = ;
if(str[j][len-] == 'D') a[j].flo = ;
if(str[j][len-] == 'H') a[j].flo = ;
if(str[j][len-] == 'S') a[j].flo = ; }
} void judge(struct node a)
{
if(a.num == )
printf("%c",'A') ;
else if(a.num == )
printf("") ;
else if(a.num == )
printf("J") ;
else if(a.num == )
printf("Q") ;
else if(a.num == )
printf("K") ;
else printf("%d",a.num) ;
if(a.flo == )
printf("S") ;
else if(a.flo == )
printf("H") ;
else if(a.flo == )
printf("D") ;
else if(a.flo == )
printf("C") ;
}
void solve()
{
int j ;
for(int i = ; i < ; i++)
{
for(j = ; j < ; j++)
{
if(i != j && a[i].flo == a[j].flo)
{
e = ;
for(int k = ; k < ; k++)
{ if(k != i && k != j)
{
ch[e].num = a[k].num ;
ch[e].flo = a[k].flo ;
e++ ;
//strcpy(ch[e++],str[k]) ;
}
}
sort(ch,ch+e,cmp) ;
int a1 = a[i].num ;
int a2 = a[j].num ;
if( a1 == (a2+)% || (a1 == &&a2 == ) )
{
printf("%s %s ",str[i],str[j]);
judge(ch[]) ;
printf(" ") ;
judge(ch[]) ;
printf(" ") ;
judge(ch[]) ;
printf("\n") ;
break;
}
else if(a1 == (a2+)% || (a1 == && a2 == ) )
{
printf("%s %s ",str[i],str[j]);
judge(ch[]) ;
printf(" ") ;
judge(ch[]) ;
printf(" ") ;
judge(ch[]) ;
printf("\n") ;
break;
}
else if(a1 == (a2+)% || (a1 == && a2 == ) )
{
printf("%s %s ",str[i],str[j]);
judge(ch[]) ;
printf(" ") ;
judge(ch[]) ;
printf(" ") ;
judge(ch[]) ;
printf("\n") ;
break;
}
else if(a1 == (a2+)% || (a1 == && a2 == ) )
{
printf("%s %s ",str[i],str[j]);
judge(ch[]) ;
printf(" ") ;
judge(ch[]) ;
printf(" ") ;
judge(ch[]) ;
printf("\n") ;
break;
}
else if(a1 == (a2+)% || (a1 == && a2 == ) )
{
printf("%s %s ",str[i],str[j]);
judge(ch[]) ;
printf(" ") ;
judge(ch[]) ;
printf(" ") ;
judge(ch[]) ;
printf("\n") ;
break;
}
else if(a1 == (a2+)% || (a1 == && a2 == ) )
{
printf("%s %s ",str[i],str[j]);
judge(ch[]) ;
printf(" ") ;
judge(ch[]) ;
printf(" ") ;
judge(ch[]) ;
printf("\n") ;
break;
}
}
}
if(j < ) break ;
}
}
int main()
{
int n ;
scanf("%d",&n) ;
for(int i = ; i <= n ; i++ )
{
for(int j = ; j < ; j++)
scanf("%s",str[j]) ;
inv() ;
printf("Problem %d: ",i) ;
solve() ;
}
return ;
}
这个是比赛的时候一宁手敲出来的
#include <iostream>
#include <algorithm>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <cmath> using namespace std; struct node
{
int num,flo;
} input[],temp[];
int cmp(const void *a,const void *b)
{
struct node *aa=(struct node *)a;
struct node *bb=(struct node *)b;
if(aa->num==bb->num)return aa->flo-bb->flo;
else return aa->num-bb->num;
}
char s[];
int flocnt[];
int judge(int p)
{
if(s[p]=='A')
return ;
else if(s[p]=='J')
return ;
else if(s[p]=='Q')
return ;
else if(s[p]=='K')
return ;
else if(s[p]=='C')
return ;
else if(s[p]=='D')
return ;
else if(s[p]=='H')
return ;
else if(s[p]=='S')
return ;
else return s[p]-''-;
}
bool vis[],flat;
bool max11(node a,node b)
{
if(a.num==b.num)
{
if(a.flo<b.flo)return true;
else return false;
}
else if(a.num<b.num)return true;
else return false;
}
void dfs(int x)
{
if(flat)
return ;
if(x==)
{
for(int i=; i<; i++)
{
if(flocnt[input[i].flo]>&&!flat)
{
temp[]=input[i];
vis[i]=true;
dfs();
vis[i]=false;
}
}
return ;
}
else if(x==)
{
for(int i=; i<; i++)
{
if(!vis[i]&&input[i].flo==temp[].flo&&!flat)
{
temp[]=input[i];
vis[i]=true;
dfs();
vis[i]=false;
}
}
}
else if(x==)
{
struct node sorted[];
struct node xxx=temp[];
for(int i=; i<; i++)
sorted[i-]=temp[i];
qsort(sorted,,sizeof(sorted[]),cmp);
int pp;
for(int i=; i<; i++)
{
if(temp[i].flo==sorted[].flo&&temp[i].num==sorted[].num)
{
pp=i;
break;
}
}
if(pp==)
{
xxx.num+=;
if(max11(temp[],temp[]))
{ }
else
xxx.num+=;
xxx.num%=;
if(xxx.flo==temp[].flo&&xxx.num==temp[].num)flat=true;
return;
}
else if(pp==)
{
xxx.num+=;
if(max11(temp[],temp[]))
{ }
else
xxx.num+=;
xxx.num%=;
if(xxx.flo==temp[].flo&&xxx.num==temp[].num)flat=true;
return;
}
else if(pp==)
{
xxx.num+=;
if(max11(temp[],temp[]))
{ }
else
xxx.num+=;
xxx.num%=;
if(xxx.flo==temp[].flo&&xxx.num==temp[].num)flat=true;
return;
}
}
else
{
for(int i=; i<; i++)
{
if(!vis[i]&&!flat)
{
temp[x]=input[i];
vis[i]=true;
dfs(x+);
vis[i]=false;
}
}
} }
void pri(int x)
{
if(temp[x].num==)printf("A");
else if(temp[x].num==)printf("J");
else if(temp[x].num==)printf("Q");
else if(temp[x].num==)printf("K");
else printf("%d",temp[x].num+);
if(temp[x].flo==)printf("C");
else if(temp[x].flo==)printf("D");
else if(temp[x].flo==)printf("H");
else if(temp[x].flo==)printf("S");
}
int main()
{
//freopen("data.in","r",stdin);
int t,len;
scanf("%d",&t);
while(t--)
{
memset(flocnt,,sizeof(flocnt));
for(int i=; i<; i++)
{
scanf("%s",s);
len=strlen(s);
if(len==)
{
input[i].flo=judge();
input[i].num=;
}
else
{
input[i].flo=judge();
input[i].num=judge();
}
flocnt[input[i].flo]++;
}
memset(vis,false,sizeof(vis));
flat=false;
dfs();
for(int i=; i<; i++)
{
pri(i);
printf(" ");
}
pri();
puts("");
}
return ;
}
POJ 2200 A Card Trick(模拟)的更多相关文章
- HDU 2319 Card Trick (模拟)
题目链接 Problem Description The magician shuffles a small pack of cards, holds it face down and perform ...
- UESTC 890 Card Trick(DP 纸牌魔术)
题意 给你一些牌 所有正面朝下放桌子上 你选一个起点 翻开那张牌 牌上的数字是几就向前走几步 J,Q,K 都是向前走10步 A向前走11步 知道向前走相应的步数后超过了终点 ...
- ny714 Card Trick
Card Trick 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 The magician shuffles a small pack of cards, holds ...
- SPOJ 1108 Card Trick 暴力模拟
解释一下样例,因为我觉得这个题意表述的不是很清楚.以第二组样例为例. 牌序为:3 1 4 5 2 第一轮:把 3 放到末尾:1 4 5 2 3,最顶上的牌是1,把1拿走.剩余 4 5 2 3 第二轮: ...
- poj 1008:Maya Calendar(模拟题,玛雅日历转换)
Maya Calendar Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 64795 Accepted: 19978 D ...
- POJ 1027 The Same Game(模拟)
题目链接 题意 : 一个10×15的格子,有三种颜色的球,颜色相同且在同一片内的球叫做cluster(具体解释就是,两个球颜色相同且一个球可以通过上下左右到达另一个球,则这两个球属于同一个cluste ...
- POJ 3414 Pots【bfs模拟倒水问题】
链接: http://poj.org/problem?id=3414 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=22009#probl ...
- poj 2632 Crashing Robots(模拟)
链接:poj 2632 题意:在n*m的房间有num个机器,它们的坐标和方向已知,现给定一些指令及机器k运行的次数, L代表机器方向向左旋转90°,R代表机器方向向右旋转90°,F表示前进,每次前进一 ...
- poj 1028 Web Navigation(模拟)
题目链接:http://poj.org/problem? id=1028 Description Standard web browsers contain features to move back ...
随机推荐
- HTML中的<select>标签如何设置默认选中的选项
方法有两种. 第一种通过<select>的属性来设置选中项,此方法可以在动态语言如php在后台根据需要控制输出结果. 1 2 3 4 5 < select id = " ...
- 返回页面,主页面不刷新window.history.go(-1),主页面刷新window.location.go(-1)
返回上一页,不刷新 window.history.go(-1) 返回上一页,刷新 window.location.go(-1)
- 实例介绍Cocos2d-x中Box2D物理引擎:HelloBox2D
我们通过一个实例介绍一下,在Cocos2d-x 3.x中使用Box2D物理引擎的开发过程,熟悉这些API的使用.这个实例运行后的场景如图所示,当场景启动后,玩家可以触摸点击屏幕,每次触摸时候,就会在触 ...
- C语言(简单游戏)-走出迷宫
#include <stdio.h> //宏定义 maze[ROWS][COLS];行和列; #define ROWS 7 #define COLS 6 //绘制迷宫(全局变量) char ...
- 基于 HTML5 的数据存储
以前想做个静态网页APP.最初的思路是用本地文件存储数据,后来发现在手机上运行时,文件无法找到. 经过了长达几个月的搜索(实际也就几天),没有找到合适的方法. 就在绝望的时候,无意间搜到基于HTML5 ...
- MLlearning(2)——simHash算法
这篇文章主要讲simHash算法.这是一种LSH(Locality-Sensitive Hashing,局部敏感哈希)的简单实现.它是广泛用于数据去重的算法,可以用于相似网站.图片的检索.而且当两个样 ...
- Eclipse Class Decompiler---Java反编译插件
若转载,请标明出处http://www.cnblogs.com/last_hunter/p/5626779.html,谢谢! ------------------------------------- ...
- template_11实参演绎
1,演绎过程匹配类型A(来自实参的类型),参数化类型P(行参参数声明)如果被声明的参数是一个引用声明g(T& )那么P就是所引用类型T:f(T)中P就是所声明的参数类: decay指从数组和函 ...
- ATL一:CWindowImpl
1,#ifdef _ATL_DISABLE_NO_VTABLE#define ATL_NO_VTABLE#else#define ATL_NO_VTABLE __declspec(novtable)# ...
- Linux下SCP的使用
一.下载远程文件到本地 scp -i /Users/user/ssh/id_rsa root@192.168.1.8:/root/talk_server_redis/dump.rdb /Users/k ...