UVA127

链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=63

一道非常好的栈的模拟题,训练计划又往后推了一周,因为各种事情,不过自己已经做了修改,另外说一下,今晚寝室那两尊神不在,难得的心情好,

这题其实还是看了别人的代码的,大牛博客:http://blog.csdn.net/hyczms/article/details/38009937

我的代码:

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<vector>
#include<stack>
#include<algorithm>
using namespace std;
const int maxn=;
struct Card
{
char value,suit;
};
int judge(Card x,Card y)
{
return (x.value==y.value||x.suit==y.suit);
}
int main()
{
stack<Card> s[maxn];
Card card;
int n=,i;
while(scanf("%c%c", &card.value, &card.suit) && card.value != '#')
{
getchar();
s[n++].push(card);
if(n==)
{
int m=,flag;
while(true)
{
for(i=m;i<n;i++)
{
if(i>=&&judge(s[i].top(),s[i-].top()))
{
flag=;
break;
}
else if(i>=&&judge(s[i].top(),s[i-].top()))
{
flag=;
break;
}
}
if(i==n)
break;
if(flag==)
{
s[i-].push(s[i].top());
m=i-;
}
else
{
s[i-].push(s[i].top());
m=i-;
}
s[i].pop();
if(s[i].empty())
{
for(int j=i;j<n-;j++)
s[j]=s[j+];
while(!s[n-].empty())
s[n-].pop();
n--;
}
}
if(n>)
printf("%d piles remaining:",n);
else
printf("%d pile remaining:",n);
for(int i=;i<n;i++)
{
printf(" %d",s[i].size());
while(!s[i].empty())
s[i].pop();
}
printf("\n");
n=;
}
}
return ;
}

开始刷题的第一天,也只是利用晚上复习完考研回寝室的时间做做自己喜欢的事情,希望可以坚持下去

UVA673

链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=103&page=show_problem&problem=614

一道栈的经典题目

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<vector>
#include<stack>
#include<algorithm>
#include<cctype>
#include<cstdlib>
using namespace std;
const int maxn=+;
//char s[maxn];
int main()
{
int T;
cin>>T;
getc(stdin);
while(T--)
{
char s[maxn];
gets(s);
stack<char> a;
int str1=']'-'[';
int str2=')'-'(';
int n=strlen(s);
for(int i=;i<n;i++)
{
if(a.empty())
{
a.push(s[i]);
continue;
}
char t=a.top();
if(s[i]-t==str1||s[i]-t==str2)
a.pop();
else
a.push(s[i]);
}
if(a.empty())
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
return ;
}

UVA101

链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=103&page=show_problem&problem=37

这道题目在UVA上面AC率比较低,事实证明也不是一道非常容易的题目,卡了我好久,算是一道恶心的模拟,理解题意就用了好几天,最后也还是参照着题解才过的,不过这类似的题目我一定得多做,对提高代码能力是非常有帮助的。另外就是自己刷题速度实在是太慢了,必须督促自己坚持每天好好刷题,uva虽然略难,但真的是一个靠谱的OJ,不过这题,今晚回宿舍一定要在好好理解一下,总结一下

解题报告来自:http://m.blog.csdn.net/blog/yexiaohhjk/44969131

用了vector,确实大大减少了代码量,也是刘汝佳老师提供的一种写法,和神牛的差距永远那么大

贴一下题目意思:

1.move a onto b,把a和b上面的方块都放回原来位置,然后把a放到b上面;

2.move a over b,把a上面的放回原处,然后把a放在b所在的方块堆的上面;

3.pile a onto b,把b上面的放回原来位置,然后把a和a上面的方块整体放到b上面;

4.pile a over b,把a和a上面的方块整体放到b所在堆的上面。

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<vector>
#include<cctype>
#include<algorithm>
using namespace std;
const int maxn=;
int n;
vector <int>pile[maxn];
void find_block(int a,int &p,int &h) //找到a在第p堆的第h个
{
for(p=;p<n;p++)
{
for(h=;h<pile[p].size();h++)
if(pile[p][h]==a)
return;
}
}
void clear_block(int p,int h) //将a上面的元素放回原处
{
for(int i=h+;i<pile[p].size();i++)
{
int b;
b=pile[p][i];
pile[b].push_back(b);
}
pile[p].resize(h+);
}
void onto_block(int p,int h,int p2) //将a及上面的元素放在b上
{
for(int i=h;i<pile[p].size();i++)
pile[p2].push_back(pile[p][i]);
pile[p].resize(h);
}
void print() //打印输出
{
for(int i=;i<n;i++)
{
printf("%d:",i);
for(int j=;j<pile[i].size();j++)
printf(" %d",pile[i][j]);
printf("\n");
}
}
int main()
{
cin>>n;
for(int i=;i<n;i++)
pile[i].push_back(i);
string s1,s2;
int a,b;
while(cin>>s1)
{
if(s1=="quit")
break;
cin>>a>>s2>>b;
int pa,pb,ha,hb;
find_block(a,pa,ha);
find_block(b,pb,hb);
if(pa==pb) continue;
if(s2=="onto")
clear_block(pb,hb);
if(s1=="move")
clear_block(pa,ha);
onto_block(pa,ha,pb);
}
print();
return ;
}

uva133

纯种的模拟题,约瑟夫环双向模拟,开始被vector坑了,后来发现这题真的不能用vector,同时也对vector有了更深的认识,还好有大牛提点

链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=69

别人的的博客:http://www.cnblogs.com/xiaobaibuhei/archive/2013/04/17/3026383.html

下面贴一下弱菜的代码:

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<vector>
#include<algorithm>
using namespace std;
const int maxn=;
int a[maxn];
int main()
{
int n,m,k;
while(cin>>n>>m>>k)
{
if(n==&&m==&&k==)
break;
for(int i=;i<n;i++)
a[i]=i+;
int p=n-,q=;
int flag=;
int length=n;
while(length)
{
for(int i=;i<m;)
{
p=(p+)%n;
if(a[p]) i++;
}
for(int i=;i<k;)
{
q=(q-+n)%n;
if(a[q]) i++;
}
if(flag) flag=;
else printf(",");
if(p==q)
{
printf("%3d",a[p]);
a[p]=;
--length;
}
else
{
printf("%3d%3d",a[p],a[q]);
a[p]=a[q]=;
length-=;
}
}
cout<<endl;
}
return ;
}

uva442

这题是用新电脑在自习室做的,吐槽一下,新电脑打代码很难用,这题最值得学习就是类的继承的用法,很经典,这题也是一道很好的栈模拟题,看穿背景以后就是,只需要判断")".而不用管"("

题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=383

我的代码:

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<vector>
#include<stack>
#include<algorithm>
using namespace std;
const int maxn=;
typedef struct Matrix //工程代码的写法还是值得学习
{
int a,b;
Matrix(int a=,int b=):a(a),b(b){};
};
Matrix p[maxn];
int main()
{
int n;
string c;
cin>>n;
for(int i=;i<n;i++)
{
cin>>c;
cin>>p[c[]-'A'].a>>p[c[]-'A'].b;
}
string input;
stack <Matrix> s;
while(cin>>input)
{
int flag=,sum=;
for(int i=;i<input.length();i++)
{
if(input[i]>='A'&&input[i]<='Z')
s.push(p[input[i]-'A']);
else if(input[i]==')')
{
Matrix m2=s.top(); s.pop();
Matrix m1=s.top(); s.pop();
if(m1.b!=m2.a)
{
flag=;
break;
}
sum+=m1.a*m2.a*m2.b;
s.push(Matrix(m1.a,m2.b));
}
}
if(!flag)
cout<<"error"<<endl;
else
cout<<sum<<endl;
}
return ;
}

uva11111

这道题目跟上面的题目几乎类似,但还是搞了半天,就是普普通通的栈模拟,很经典的一道题,现在越来越喜欢uva上面刘汝佳的题目了,确实都很经典,但自己还是太弱了,智商又不够,只能慢慢积累了

链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2052

参看了一下别人的博客,吐槽一下,开始自己犯了低级错误,把int跟char混用

链接:http://m.blog.csdn.net/blog/cgl1079743846/7757457

我的代码:

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<stack>
using namespace std;
const int maxn=;
int k[maxn];
int cnt,flag;
typedef struct toy
{
int val,res;
};
stack <toy> s;
void work()
{
while(!s.empty())
s.pop();
toy temp;
temp.val=k[];
temp.res=abs(k[]);
s.push(temp);
for(int i=;i<cnt;i++)
{
if(s.empty())
return;
if(k[i]<)
{
if(abs(k[i])<s.top().res)
{
toy apple;
apple.val=k[i];
apple.res=abs(k[i]);
s.push(apple);
}
else return;
}
if(k[i]>)
{
if(s.top().val+k[i]==)
{
if(i!=cnt-)
{
s.pop();
s.top().res-=k[i];
}
else s.pop();
}
else return;
}
}
if(s.empty())
flag=;
}
int main()
{
int x;
char c;
while(~scanf("%d%c",&x,&c))
{
k[]=x;
cnt=;
flag=;
if(c!='\n')
{
while(scanf("%d%c",&k[cnt++],&c))
{
if(c=='\n')
break;
}
}
if(cnt%==)
work();
if(flag)
cout<<":-) Matrioshka!"<<endl;
else
cout<<":-( Try again."<<endl;
}
return ;
}

uva540

list专题的最后一题,用了模拟+队列

参考了一下这位大神的解题报告:http://blog.csdn.net/mistkafka/article/details/9472643

我的代码:

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<vector>
#include<queue>
using namespace std;
const int maxrank=;
const int maxn=;
int team[maxrank];
queue <int> que[maxn];
queue <int> bigQue;
int main()
{
int T;
int cases=;
while(scanf("%d",&T)!=EOF)
{
if(T==)
break;
while(!bigQue.empty())
bigQue.pop();
for(int i=;i<maxn;i++)
while(!que[i].empty())
que[i].pop();
int n;
memset(team,,sizeof(team));
for(int cas=;scanf("%d",&n)==;cas++)
{
for(int i=;i<n;i++)
{
int num;
scanf("%d%c",&num);
team[num]=cas;
}
}
printf("Scenario #%d\n",++cases);
while(true)
{
string cmd;
cin>>cmd;
if(cmd=="ENQUEUE")
{
int num;
cin>>num;
if(que[team[num]].empty())
bigQue.push(team[num]);
que[team[num]].push(num);
}
else if(cmd=="DEQUEUE")
{
int app=bigQue.front();
cout<<que[app].front()<<endl;
que[app].pop();
if(que[app].empty())
bigQue.pop();
}
else if(cmd=="STOP")
{
cout<<endl;
break;
}
}
}
return ;
}

接下来开始下一个专题Binary Trees,继续加油,总还是有很多不懂的东西,只有从头开始刷题,才能发现当年在刷一些简单数据结构时自己学得不扎实,以及遇到的各种问题

入门经典——基础数据结构专题(List)的更多相关文章

  1. 正经学C#_介绍与其编写基础:《c#入门经典》

    本文所讲内容,均可在<c#入门经典>中可以查询.如有错误,敬请指出.谢谢! C#:全称C Shar.是微软.Net Framework平台下最为主要的客户语言之一.个人理解,c#是微软最为 ...

  2. hrbustoj 1545:基础数据结构——顺序表(2)(数据结构,顺序表的实现及基本操作,入门题)

    基础数据结构——顺序表(2) Time Limit: 1000 MS    Memory Limit: 10240 K Total Submit: 355(143 users) Total Accep ...

  3. (Step1-500题)UVaOJ+算法竞赛入门经典+挑战编程+USACO

    http://www.cnblogs.com/sxiszero/p/3618737.html 下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年 ...

  4. 基础数据结构之(Binary Trees)

    从头开始刷ACM,真的发现过去的很多漏洞,特别越是基础的数据结构,越应该学习得精,无论是ACM竞赛,研究生考试,还是工程上,对这些基础数据结构的应用都非常多,深刻理解非常必要.不得不说最近感触还是比较 ...

  5. 算法竞赛入门经典+挑战编程+USACO

    下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年到1年半年时间完成.打牢基础,厚积薄发. 一.UVaOJ http://uva.onlinej ...

  6. c语言入门经典(第5版)

    文章转载:http://mrcaoyc.blog.163.com/blog/static/23939201520159135915734 文件大小:126MB 文件格式:PDF    [点击下载] C ...

  7. Oracle编程入门经典 第11章 过程、函数和程序包

    目录 11.1          优势和利益... 1 11.2          过程... 1 11.2.1       语法... 2 11.2.2       建立或者替换... 2 11.2 ...

  8. 转 Kafka入门经典教程

    Kafka入门经典教程 http://www.aboutyun.com/thread-12882-1-1.html 问题导读 1.Kafka独特设计在什么地方?2.Kafka如何搭建及创建topic. ...

  9. C语言学习书籍推荐《C语言入门经典(第5版)》下载

    霍尔顿 (Ivor Horton) (作者), 杨浩 (译者) 下载地址:点我 C语言是每一位程序员都应该掌握的基础语言.C语言是微软.NET编程中使用的C#语言的基础:C语言是iPhone.iPad ...

随机推荐

  1. Struts中的数据处理的三种方式

    Struts中的数据处理的三种方式: public class DataAction extends ActionSupport{ @Override public String execute() ...

  2. POJ 3292 Semi-prime H-numbers (素数筛法变形)

    题意:题目比较容易混淆,要搞清楚一点,这里面所有的定义都是在4×k+1(k>=0)这个封闭的集合而言的,不要跟我们常用的自然数集混淆. 题目要求我们计算 H-semi-primes, H-sem ...

  3. HDU - 1205 I NEED A OFFER!

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1203 题意: 该题要求得到一份offer的最大概率,在例子中的0.44 = 1-(1-0.2)*(1- ...

  4. 河南多校大一训练赛 G 硬币

    题目链接:http://acm.hust.edu.cn/vjudge/contest/125004#problem/G 密码:acm Description 宇航员Bob有一天来到火星上,他有收集硬币 ...

  5. 43个优秀的Swift开源项目推荐(转载)

    ["轮子"] 工具类 SwiftyJSON:GitHub 上最为开发者认可的 JSON 解析类 Dollar.swift:Swift 版 Lo-Dash (或 underscore ...

  6. PAT1015

    A reversible prime in any number system is a prime whose "reverse" in that number system i ...

  7. hdu_5711_Ingress(TSP+贪心)

    题目连接:hdu5711 这题是 HDU 女生赛最后一题,TSP+贪心,确实不好想,看了wkc巨巨的题解,然后再做的 题解传送门:Ingress #include<cstdio> #inc ...

  8. java开发第四天——莫名其妙的一天

    搞了一天的ACM,欲哭无泪,消化的不好打了一天的嗝,然后在机房睡了一个下午,感觉还真的有点对不起队友的说.别的借口我也不找了,确实是自己不努力,时至今日,一切都是我咎由自取.等这次项目一结束我就全身心 ...

  9. Java socket通信

    首先抛开语言层面,简单介绍一下socket通信过程: 1.服务器端开启监听端口,阻塞进程  等待客户端连接 2.客户端连接,这时就产生了一个socket socket就相当于一个传递消息的通道,一般都 ...

  10. cakephp , the subquery

    Cakephp 框架帮我们做了很多的工作,的确省了我们很多工作,提高了效率. 但是,碰到一些比较复杂的查询时,还是有些问题,官方的cookbook api 有说明一些详细的用法,但感觉还是不太够,有些 ...