UVa第五章STL应用 习题((解题报告))具体!
例题5——9 数据库 Database UVa 1592
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<cmath>
#include<string>
#include<queue>
#include<stack>
#include<vector>
#include<map>
#include<set>
#include<algorithm>
using namespace std;
int n, m;
int cnt[10034][12]; void before(){
int x = 0;
char ch;
getchar();
string str;
map<string, int>dict;
int t;
for(int i = 0; i< n; i++){
t = 0;
for(;;){
ch = cin.get();
if(ch != ',' && ch != '\n'){
str += ch;
}
else{
if(dict.count(str)){
cnt[i][t++] = dict[str];
}
else{
dict[str] = ++x;
cnt[i][t++] = dict[str];
}
str.clear();
}
if(ch == '\n'){
break;
}
}
}
}
int main()
{
while(cin>>n>>m){
before();
string str;
int flag = 0;
for(int i = 0; i< m - 1 && !flag; i++){
for(int j = i + 1; j < m && !flag; j++){
map<pair<int, int>, int >buf;
for(int k = 0; k < n && !flag; k++){
pair<int, int>pq(cnt[k][i], cnt[k][j]);
if(buf.count(pq)){
flag = 1;
cout<<"NO"<<endl
<<buf[pq] + 1<<" "<<k + 1<<endl
<<i + 1<<" "<<j + 1<<endl;
}
else{
buf[pq] = k;
}
}
} }
if(!flag){
cout<<"YES"<<endl;
}
}
return 0;
}
习题5-1 代码对齐 UVa 1593 Alignment of Code
#include<iostream>
#include<string>
#include<stdio.h>
#include<vector>
#include<sstream>
using namespace std;
int main()
{
vector<string>cnt[1003];
string str;
int row=0;
int M[20]= {0};
while(getline(cin,str))
{
stringstream ss(str); //stringstream 以空格和换行作为分隔符
string buf;
int col=0;//控制列数 while(ss>>buf)
{
cnt[row].push_back(buf); //然后利用ss 能够把一行元素扯开。push到每一行中去。 M[col]=max((int)buf.size(),M[col]);//每循环一次列数加一。那么n行输入之后每一个M元素
col++; // 值即为此列最长字符值。
}
row++; //行数加一
ss.clear(); // 假设多次使用ss对象,尽量clear一下。
}
int j ,i;
for( i=0; i<row; i++)
{
for( j=0; j<cnt[i].size()-1; j++)
{
cout<<cnt[i][j]; for(int k=0; k<=M[j]-cnt[i][j].size(); k++)
cout<<" ";
}
cout<<cnt[i][j]<<endl;
}
return 0;
}
习题5-2 Ducci Sequence UVa1594
说实话 这个题目挺气人!。主要还是智商问题啊 。一開始非常单纯的想,对于每一个多元组的生成,推断是否出现过和是否是0元组。那么想着利用stringstrem 把输入 输出到数组。运算完之后。在运用stringstream 生成一个string对象放入map ,所以说不超时才怪!可是还是想把这个过程模拟一遍。至今有一处特别奇异,对于多次运用stringstream。clear()函数怎么无效!
!!
只是还是在不断调试中学到了好多东西
接下来是一个严重超时的版本号:
#include<iostream>
#include<string>
#include<vector>
#include<cmath>
#include<map>
#include<sstream>
using namespace std;
int main()
{
int t,n;
(cin>>t).get(); while(t--)
{
map<string,int>cnt;
(cin>>n).get();
string str;
getline(cin,str);
cnt[str]=1; stringstream ss;
ss.str(str);
for(;;)
{
int dict[16],t=0;
while(ss>>dict[t])
{
t++;
} string stream,sumstr;
ss.clear();
int k=dict[0],flag=1; for(int i=0; i<n-1; i++)
{
stringstream ss;
dict[i]=abs(dict[i]-dict[i+1]);
if(dict[i]!=0)
flag=0;
ss<<dict[i];
ss>>stream; sumstr+=(stream+" ");
ss.clear();
}
dict[t-1]=abs(dict[t-1]-k); if(dict[t-1]!=0)
flag=0;
if(flag)
{
cout<<"ZERO"<<endl;
break;
} stringstream sss; sss<<dict[t-1];
sss>>stream;
sumstr+=stream; if(cnt.count(sumstr))
{
cout<<"LOOP"<<endl;
break;
}
cnt[sumstr]=1;
ss.clear();
ss.str(sumstr);
}
cnt.clear();
}
return 0;
}
/*
4
4
8 11 2 7
**/
然后baidu一下网上代码。仅仅看了一句话就恍然大悟!
!说是在生成1000次之内必定出现结果!那么仅仅需在循环1000次中推断是否出现0元组。假设出现break,一千次之内没出现,那么必定存在loop了,这样就不用保存每次的生成结果了!
!
#include<iostream>
#include<string.h>
#include<cmath>
using namespace std;
int main()
{
int t,cnt[23];
cin>>t;
while(t--)
{
int n;
cin>>n;
int i; for(i=0; i<n; i++)
{
cin>>cnt[i]; }
int k,ok=0;
for(int j=0; j<1001; j++)
{
int T=cnt[0],flag=1;
for(k=0; k<i-1; k++)
{
cnt[k]=abs(cnt[k]-cnt[k+1]);
if(cnt[k]!=0)
flag=0;
}
cnt[k]=abs(cnt[k]-T);
if(cnt[k]!=0)
flag=0;
if(flag)
{
ok=1;
cout<<"ZERO"<<endl;
break;
} }
if(!ok)
cout<<"LOOP"<<endl; }
return 0;
}
之開始真是日了狗了。还算注意到了输入为1的时候。这个时候什么都不输出。可是一開始就是“Discarded cards: ”非多了一个空行。导致输入为1的时候也输出多一个空行,PE N次!
#include<iostream>
#include<queue>
using namespace std;
int main()
{
int n;
while(cin>>n,n)
{
queue<int>cnt;
for(int i=1;i<=n;i++)
{
cnt.push(i);
}
int flag=1;
cout<<"Discarded cards:"; while(cnt.size()!=1)
{
if(flag)
{
flag=0;
cout<<" "<<cnt.front();
}
else
cout<<", "<<cnt.front();
cnt.pop();
cnt.push(cnt.front());
cnt.pop();
} cout<<endl<<"Remaining card: "<<cnt.front()<<endl;
}
return 0;
}
习题 5-4 Foreign Exchange UVa 10763
自己还真不会做。哭死…看来水题刷的少~。有两种方法。第一种特别逗比~,另外一种不失为好方法,值得学习。
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
int n;
while(cin>>n,n)
{
vector<int>cnt[2];
int a,b;
for(int i=0;i<n;i++)
{
cin>>a>>b;
cnt[0].push_back(a);
cnt[1].push_back(b);
}
sort(cnt[0].begin(),cnt[0].end());
sort(cnt[1].begin(),cnt[1].end());
if(cnt[0]==cnt[1])
cout<<"YES"<<endl;
else
cout<<"NO"<<endl; }
return 0;
}
</span></strong></span></span></strong>
TWO:
#include<iostream>
#include<string.h>
using namespace std;
int graph[2000][2000];
int main()
{
int n;
while(cin>>n,n)
{
int a,b;
memset(graph,0,sizeof(graph));
for(int i=0;i<n;i++)
{
cin>>a>>b;
graph[a][b]++;
graph[b][a]--;
}
int ok=0;
for(int i=0;i<2000;i++)
{
for(int j=0;j<2000;j++)
{
if(graph[i][j]!=0)
{
ok=1;
goto loop;
}
}
}
loop:
if(ok)
cout<<"NO"<<endl;
if(!ok)
cout<<"YES"<<endl;
}
}
</span></strong></span></span></strong>
Compound Words UVA 10391 习题 5-5
#include<iostream>
#include<set>
#include<string>
using namespace std;
int main()
{
string str;
set<string>cnt;
while(cin>>str)
cnt.insert(str);
set<string>::iterator it;
for(it=cnt.begin();it!=cnt.end();it++)
{
for(int i=0;i<(*it).size()-1;i++)
{
string str1=(*it).substr(0,i+1);
string str2=(*it).substr(i+1,(*it).size()-i-1);
if(cnt.count(str1)&&cnt.count(str2))
{
cout<<*it<<endl;
break;
}
}
}
return 0;
}
习题5-6 Symmetry Seoul UVa 1595
事实上很多其它的是学习了stl的使用方法。注意代码运用了类复制构造函数,用产生的暂时对象作为函数參数。
#include<set>
#include<iostream>
using namespace std;
int main()
{
int t,n;
cin>>t;
while(t--)
{
set< pair<double ,double> >cnt;
typedef pair<double,double>Point;
cin>>n;
double sum=0;
for(int i=0; i<n; i++)
{
double x,y;
cin>>x>>y;
sum+=x;
cnt.insert(Point(x,y));
}
double aver=sum/n;//cout<<"aver="<<aver<<endl;
bool ok=true;
for(set< pair<double,double> >::iterator it=cnt.begin(); it!=cnt.end(); it++)
{
if(!cnt.count(Point(2*aver-(*it).first,(*it).second)))
{
//cout<<2*aver-(*it).first<<" "<<(*it).second<<endl;
ok=false;
break;
}
}
if(ok)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
return 0;
}
习题5-7 Printer Queue UVa 12100
题目有一处想当麻烦。直接导致了优先队列不是那么可取。那就是最后一组測试例子。那么要模拟队列运作了。看了下网上思路。
队列中每一个元素都有两个属性,一个是紧急性,一个是是否是要打印。每一个元素都能够设成类对象。同一时候用一个优先队列保存紧急性属性,对于每一个优先队列队首元素,都是接下来要应该打印的元素,那么对于每次对象P的弹出,推断是不是应该打印的元素。假设是接下来还要推断是不是之前m值所要求打印的元素,假设是那么就该出现结果了。即优先队列弹出的元素总数,不是的话移到末尾,同一时候都要pop()。
#include<iostream>
#include<queue>
using namespace std; struct P
{
int prio,IF;
P(int x,int y)
{
prio=x;
IF=y;
}
};
int main()
{
int t;
cin>>t;
while(t--)
{
priority_queue<int>dict;
queue<P>cnt;
int n,m;
cin>>n>>m;
for(int i=0; i<n; i++)
{
int a;
cin>>a;
if(i!=m)
cnt.push(P(a,1));
else
cnt.push(P(a,0));
dict.push(a);
} int count=0,ok=0;
for(;;)
{
int t=dict.top();
dict.pop();
while(1)
{
P x=cnt.front(); cnt.pop();
if(t==x.prio)
{
count++;
if(x.IF!=0)
{ break;
}
else
{
ok=1;
cout<<count<<endl;
break;
}
}
else
{
cnt.push(x);
}
}
if(ok)
break;
}
}
return 0;
}
后半部分兴许!
!
!
!
UVa第五章STL应用 习题((解题报告))具体!的更多相关文章
- STL学习笔记(第五章 STL组件)
STL组件 若干精心勾画的组件共同合作,构筑起STL的基础.这些组件最关键的是容器.迭代器和算法. 下图演示了STL组件之间的合作 容器(Containers) 容器类别(简称容器)用来管理一组元素. ...
- 《Python核心编程》 第五章 数字 - 课后习题
课后习题 5-1 整形. 讲讲 Python 普通整型和长整型的区别. 答:普通整型是绝大多数现代系统都能识别的. Python的长整型类型能表达的数值仅仅与你机器支持的(虚拟)内存大小有关. 5- ...
- 《Python编程:从入门到实践》第五章 if语句 习题答案
#5.1 major = 'Software Engineering' print("Is major =='Software Engineering'? I predict True.&q ...
- 第五章第四周习题: Transformers Architecture with TensorFlow
目录 Transformer Network Packages 1 - Positional Encoding 1.1 - Sine and Cosine Angles Exercise 1 - ge ...
- uva 1025 A Spy in the Metro 解题报告
A Spy in the Metro Time Limit: 3000MS 64bit IO Format: %lld & %llu Submit Status uDebug Secr ...
- UVa 1585 - Score - ACM/ICPC Seoul 2005 解题报告 - C语言
1.题目大意 给出一个由O和X组成的字符串(长度为80以内),每个O的得分为目前连续出现的O的数量,X得分为0,统计得分. 2.思路 实在说不出了,这题没过脑AC的.直接贴代码吧.=_= 3.代码 # ...
- [JZOJ4272] [NOIP2015模拟10.28B组] 序章-弗兰德的秘密 解题报告(树形DP)
Description 背景介绍弗兰德,我不知道这个地方对我意味着什么.这里是一切开始的地方.3年前,还是个什么都没见过的少年,来到弗兰德的树下,走进了封闭的密室,扭动的封尘已久机关,在石板上知道了这 ...
- 《学习Opencv》第五章 习题6
这是第五章 习题5.6的结合版,其中实现了摄像头抓拍功能,能够成功运行. #include "stdafx.h" #include "cv.h" #includ ...
- 统计学习导论:基于R应用——第五章习题
第五章习题 1. 我们主要用到下面三个公式: 根据上述公式,我们将式子化简为 对求导即可得到得到公式5-6. 2. (a) 1 - 1/n (b) 自助法是有有放回的,所以第二个的概率还是1 - 1/ ...
随机推荐
- javascript中易犯的错误有哪些
javascript中易犯的错误有哪些 一.总结 一句话总结: 比如循环中函数的使用 函数中this的指向谁(函数中this的使用) 变量的作用域 1.this.timer = setTimeout( ...
- c# 装箱与拆箱的概念
1装箱 就是将值类型的数据赋值给引用类型的实例中 比如 int类型的123赋值给Object o int i=123; Object o=(Object) i; 2拆箱 就是从引用类型的数据中提取数据 ...
- 游标 scroll
scroll表示可随意移动游标指针(否则只能向前)
- mkfs---创建Linux文件系统
[root@xiaolizi ~]# mkfsmkfs mkfs.btrfs mkfs.cramfs mkfs.ext2 mkfs.ext3 mkfs.ext4 mkfs.minix mkfs.xfs ...
- 如何优雅的写UI——(5)选项卡功能实现
先在我们的选项卡可以说能用了,每个标签页都能点进去,但是这还远远没到能用的地步,比如说你把窗口最大化后. 立马就露出马脚了,所以这篇我们要先讲讲tabctrl的最基本的功能实现 改变选项卡大小 上图的 ...
- 【Henu ACM Round #12 C】 Alice, Bob, Two Teams
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 考虑任意两个字符串(a,b) 假设a在b的前面 那么如果a+b>=b+a 这里的+表示字符串的链接 那么显然需要交换a,b的位 ...
- 洛谷 P1177 【模板】快速排序(排序算法整理)
P1177 [模板]快速排序 题目描述 利用快速排序算法将读入的N个数从小到大排序后输出. 快速排序是信息学竞赛的必备算法之一.对于快速排序不是很了解的同学可以自行上网查询相关资料,掌握后独立完成.( ...
- BestCoder Round #65 HDOJ5592 ZYB's Premutation(树状数组+二分)
ZYB's Premutation Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Othe ...
- Appium IOS 自己主动化測试初探
手机平台的自己主动化測试工具非常多,之前研究过了安卓和苹果的原生自己主动化測试框架.经一些同事介绍,貌似Appium是个不错的工具. 想记录一下研究的结果,也算是篇干货的文章 在网上也看了一些视频.个 ...
- 用VXE保护Linux系统安全
本文被转载在:http://www.linuxso.com/a/linuxxitongguanli/161.html 650) this.width=650;" onclick=&quo ...