UVa 127 线性表模拟题
来源:互联网 发布:mac jenkins 安装配置 编辑:程序博客网 时间:2024/06/05 23:44
感觉这是一道很恶心的模拟题,英语太渣,看得很勉强就上网搜了一下知道题目的大意:<p>有52张扑克牌(大小王去掉了),每张牌用两个字符表示:例如 8H 第一个字符代表大小,第二个代表花色,现在开始发牌,如果发到的这张牌前面第3堆(或者第1堆)最上面有这种花色或者这个大小的牌 ,就把这张牌放到那堆上面,然后再向前面看可不可以再将这张牌放到更前面,知道不能放位置,如果前面的第1堆和第3堆都能放,优先放到第三堆上面,放完以后看看这张牌后面的牌能不能进行相同的操作,直到所有的牌都不能进行操作为止,再放下一张牌,最后问你,52张牌都放完并且操作完共剩了多少堆,并且输出堆数和相应堆数的牌数。</p><p>这道题还有一个坑,就是最后输出的时候1 堆要用pile,被这个错误坑了2次,唉。。。
下面是AC代码:
#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <stack>#include <algorithm>#include <queue>using namespace std;struct Stack{ int cnt; char s[52][3];};char s[53][3];int len;int mark;Stack q[52];bool match(char *s1,char *s2){ if(s1[0]==s2[0] || s1[1]==s2[1]) return true; return false;}void add(char *s,Stack *p){ strcpy((*p).s[(*p).cnt++],s);}void cpy(Stack *p1,Stack *p2){ (*p1).cnt=(*p2).cnt; for(int i=0;i<(*p1).cnt;i++) { strcpy((*p1).s[i],(*p2).s[i]); }}void sort(Stack *p,int m){ len--; for(int i=m;i<=len;i++) { cpy(&p[i],&p[i+1]); }}void opert(Stack *p,int m){ if(m==0) { mark=0; return; } else if(m>=3 && match(p[m].s[p[m].cnt-1],p[m-3].s[p[m-3].cnt-1])) { add(p[m].s[p[m].cnt-1],&p[m-3]); p[m].cnt--; if(p[m].cnt==0) sort(p,m); opert(p,m-3); } else if(match(p[m].s[p[m].cnt-1],p[m-1].s[p[m-1].cnt-1])) { add(p[m].s[p[m].cnt-1],&p[m-1]); p[m].cnt--; if(p[m].cnt==0) sort(p,m); opert(p,m-1); } else { mark=m; return; }}void digui(Stack *p){ if(mark==len) { return; } while(mark!=len) { mark++; opert(p,mark); }}int main(){ //freopen("test.in","r",stdin); while(scanf("%s",s[0])!=EOF && s[0][0]!='#') { for(int i=0;i<52;i++) q[i].cnt=0; len=0; q[len].cnt++; strcpy(q[len].s[0],s[0]); for(int i=1;i<52;i++) { scanf("%s",s[i]); if(i==25) getchar(); if(len>=2 && match(q[len-2].s[q[len-2].cnt-1],s[i])) { add(s[i],&q[len-2]); mark=len-2; opert(q,len-2); digui(q); } else if(match(q[len].s[q[len].cnt-1],s[i])) { add(s[i],&q[len]); mark=len; opert(q,mark); digui(q); } else { q[++len].cnt=1; strcpy(q[len].s[0],s[i]); } } if(len==0) printf("%d pile remaining:",len+1); else { printf("%d piles remaining:",len+1); } for(int i=0;i<=len;i++) { printf(" %d",q[i].cnt); } printf("\n"); } return 0;}
0 0
- UVa 127 线性表模拟题
- uva 127(线性表)
- uva 673(线性表)
- uva 133(线性表)
- uva 101(线性表)
- uva 10152(线性表)
- uva 442(线性表)
- uva 11111(线性表)
- uva 540(线性表)
- uva 10050(线性表)
- 线性表 - 模拟指针实现线性表
- Uva 127 模拟+细节
- UVA-133 双向链表模拟题
- UVA 10196 模拟题。。
- uva 227 模拟题
- uva 10881 模拟题
- UVA 127 (暑期-线性表-B-"Accordian" Patience)
- UVA 220 Othello 模拟题
- js判断上传文件大小
- 一贫如洗的年代2014.10.26
- AWK笔记(求最大值)
- 多少是哦阿萨德噶话说的跟卡精灵
- 豆瓣的基础架构
- UVa 127 线性表模拟题
- 逗比学习树莓派之初篇
- 英文日期格式转换
- pat-笛卡尔树
- boost.asio 学习笔记05 asio的windows实现
- C语言数据类型转换详解
- 自己动手制作一台四位计算机
- 【搜索剪枝】acm 2014东京赛区 题解
- 【MongoDB】The description of procedure in MongoDB