第一周训练 | STL和基本数据结构
A - 圆桌问题: HDU - 4841
#include<iostream>
#include<vector>
#include<stdio.h>
#include<string>
using namespace std;
int main()
{
vector<int> table;
int n,m;
while(scanf("%d%d",&n,&m)!=EOF)
{
table.clear();
for(int i=;i<*n;++i)
{
table.push_back(i);
}
int pos = ;
for(int i=;i<n;++i)
{
pos = (pos+m-)%table.size();
table.erase(table.begin()+pos);
}
int j=;
for(int i=;i<*n;++i)
{
if(!(i%)&&i)cout<<endl;
if(j<table.size()&&i==table[j])
{
++j;
cout<<"G";
}
else
{
cout<<"B";
}
}
cout<<endl<<endl;
}
return ;
}
C - 简单计算器 HDU - 1237
好自闭啊,找了半天还是WA了,完全不知道WA在哪里了Orz,先存一个档:
#include<iostream>
#include<stack>
#include<stdio.h>
#include<string>
#include<map>
#define CHECK_NUM(ch) ('0'<=ch&&ch<='9')
#define CHECK_OP(ch) ('+'==ch ||'-'==ch||'*'==ch||'/'==ch ||'\0'==ch)
using namespace std;
map<char,int>dir;
stack<double> num;
stack<char> op;
stack<double> newnum;
stack<char> newop;
double OPT(double one,double two,char temp)
{
// printf("%f",two);
double three=;
switch(temp)
{
case '+':three = two + one;break;
case '-':three = two - one;break;
case '*':three = two * one;break;
case '/':three = two / one;break;
}
// printf("%c %lf = %lf\n",temp,one,three);
return three;
}
void initi()
{
while(!num.empty())num.pop();
while(!op.empty())op.pop();
while(!newop.empty())newop.pop();
while(!newnum.empty())newnum.pop();
}
void STACK(char ch)
{
// cout<<ch<<endl;
if(!op.empty()&&num.size()>)
{
char temp=op.top();
// cout<<"当前栈顶:"<<temp<<",当前扫描:"<<ch<<endl;
if(dir[temp]>=dir[ch])
{
op.pop();
double one=num.top();num.pop();
double two=num.top();num.pop();
num.push(OPT(one,two,temp));
// cout<<"入栈num:"<<num.top()<<endl;
} }
op.push(ch);
}
int main()
{
char ch='\0';
double result=; dir['+']=; dir['-']=;
dir['*']=; dir['/']=;
dir['\0']=;
while()
{
string a="";
getline(cin,a);
initi(); if(a=="")break;
for(int i=;i<=a.length();++i)
{
double nums=;
if(CHECK_NUM(a[i]))
{
while(CHECK_NUM(a[i]))
{
nums+=a[i]-'';
nums*=;
i++;
}
nums/=;
// cout<<"nums"<<nums<<endl;
num.push(nums);
// printf("%.2f\n",num.top());
} if(CHECK_OP(a[i]))
{
STACK(a[i]); //如果是操作数就入操作数栈
}
} while(!op.empty())
{
newop.push(op.top());
op.pop();
}
while(!num.empty())
{
newnum.push(num.top());
num.pop();
}
while(!newop.empty()&&newnum.size()>)
{
char temp=newop.top();newop.pop();
// cout<<"当前弹出:"<<temp<<endl;
double one=newnum.top();newnum.pop();
double two=newnum.top();newnum.pop();
newnum.push(OPT(two,one,temp));
// cout<<"入栈num:"<<newnum.top()<<endl;
}
// printf(">>%.2lf\n",newnum.top());
// cout<<newnum.size();
printf("%.2lf\n",newnum.top());
}
return ;
}
WA
贴一个师傅的AC:
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<iostream>
#include<iomanip>
using namespace std; typedef long long LL;
#define rep(i,a,b) for(int i=a;i<b;++i) const double eps=1e-;
const int N=;
char str[N]; double stk1[N];//操作数栈
int p1;//操作数栈的栈顶指针
char stk2[N];//运算符栈
int p2;//运算符栈的栈顶指针 double op(double a,double b,char ch){
if(ch=='+')return a+b;
else if(ch=='-')return a-b;
else if(ch=='*')return a*b;
else return a/b;
} //优先级比较函数加括号的话,只需要修改这里就好了
//ch1:扫描到的,ch2:栈顶的
int comp(char ch1,char ch2)
{
int a=,b=;
if(ch1=='*'||ch1=='/')a=;
if(ch2=='*'||ch2=='/')b=;
return a<=b;
}
int main()
{
while(gets(str)) //读入一行
{ p1=,p2=;
int len=strlen(str);
if(len==&&str[]=='')break;
int i=;
double sum=;
while(i<len&&str[i]>=''&&str[i]<='')
{
sum=sum*+str[i]-'';
i++;
}
stk1[p1++]=sum;//得到操作数
while(i<len)
{
i++;//跳过空格
char ch=str[i];//读取操作数
i+=;//跳过空格
double sum=;//得到第二个操作数
while(i<len&&str[i]>=''&&str[i]<='')
{
sum=sum*+str[i]-'';
i++;
} if(p2==)//如果操作符栈为空,操作符就进栈
{
stk2[p2++]=ch;
}
else
{
//当前读到的操作数的优先级小于等于栈顶的优先级
//并且运算符栈不为空
while(p2>&&comp(ch,stk2[p2-]))
{ double ans=op(stk1[p1-],stk1[p1-],stk2[p2-]);//计算新的值
p2-=;
p1-=;
stk1[p1++]=ans;//新的值入操作数栈
}
stk2[p2++]=ch;
}
stk1[p1++]=sum;
}
while(p2!=)//当操作符栈不为空
{
double ans=op(stk1[p1-],stk1[p1-],stk2[p2-]);
p1-=;
stk1[p1++]=ans;
p2--;
}
printf("%.2f\n",stk1[]);
}
return ;
}
D - ACboy needs your help again! HDU - 1702
#include<iostream>
#include<string>
#include<queue>
#include<stack>
using namespace std;
int main()
{
int t,n,temp;
cin>>t;
while(t--)
{
string str,str1;
queue<int>Q;
stack<int>S;
cin>>n>>str;
for(int i=;i<n;++i)
{
if(str=="FIFO")
{
cin>>str1;
if(str1=="IN")
{
cin>>temp;
Q.push(temp);
}
if(str1=="OUT")
{
if(Q.empty()) cout<<"None"<<endl;
else
{
cout<<Q.front()<<endl;
Q.pop();
}
}
}
else
{
cin>>str1;
if(str1=="IN")
{
cin>>temp;S.push(temp);
}
if(str1=="OUT")
{
if(S.empty()) cout<<"None"<<endl;
else
{
cout<<S.top()<<endl;
S.pop();
} }
}
}
}
return ;
}
E - 看病要排队 HDU - 1873
#include<iostream>
#include<string>
#include<queue>
#include<stack>
using namespace std; int id;
typedef struct p
{
int id;
int pr;
}people;
bool operator < (const people &a,const people &b)
{
//当a,b的优先级一样的时候,比较a,b的编号
if(a.pr== b.pr) return (a.id > b.id);//当优先级一样的时候,先来的人先看病
return (a.pr < b.pr); }
priority_queue<people> A;
priority_queue<people> B;
priority_queue<people> C;
int intital()
{
while(!A.empty()) A.pop();
while(!B.empty()) B.pop();
while(!C.empty()) C.pop();
id=;
return ;
}
int main()
{
int num=;
while(scanf("%d",&num)!=EOF)
{
intital();
// cout<<"输入的n:"<<num<<endl;
for(int i=;i<num;++i)
{
string str;
people person;
int doctor;
cin>>str>>doctor;
// cout<<"str,doctor:"<<str<<","<<doctor<<endl; if(str=="IN")
{
++id;//人数自增
person.id=id;
cin>>person.pr; // cout<<",person.pr"<<person.pr<<endl;
switch(doctor)
{
case :
{
A.push(person);
break;
}
case :
{
B.push(person);
break;
}
case :
{
C.push(person);
break;
} }
}
else
{
switch(doctor)
{
case :
{
if(A.empty())
{
cout<<"EMPTY"<<endl;
}
else
{
cout<<A.top().id<<endl;
A.pop();
}
break;
}
case :
{
if(B.empty())
{
cout<<"EMPTY"<<endl;
}
else
{
cout<<B.top().id<<endl;
B.pop();
}
break;
}
case :
{
if(C.empty())
{
cout<<"EMPTY"<<endl;
}
else
{
cout<<C.top().id<<endl;
C.pop();
}
break;
} }
}
} }
return ;
}
士兵队列训练问题 HDU - 1276
#include<iostream>
#include<map>
#include<string>
#include<list>
using namespace std;
int main()
{
int t,n;
cin>>t;
while(t--)
{
cin>>n;
int k=;
list<int>mylist;
list<int>::iterator it;
for(int i=;i<=n;++i)mylist.push_back(i);
while(mylist.size()>)
{
int num=;
for(it=mylist.begin();it!=mylist.end();)
{
if(num++%k==)
{
it = mylist.erase(it);
}
else
{
++it;
}
}
k==?k=:k=;
}
for(it=mylist.begin();it!=mylist.end();++it)
{
if(it!=mylist.begin())cout<<" ";
cout<<*it;
}
cout<<endl;
}
return ; }
G - 产生冠军 HDU - 2094
#include<iostream>
#include<set>
#include<string>
using namespace std;
int main()
{
set<string>A,B;
string s1,s2;
int n;
while(cin>>n&&n)
{
for(int i=;i<n;++i)
{
cin>>s1>>s2;
A.insert(s1);A.insert(s2);
B.insert(s2);
}
if(A.size()-B.size()==)
{
cout<<"Yes"<<endl;
}
else
{
cout<<"No"<<endl;
}
A.clear();
B.clear();
}
return ;
}
H - Shopping HDU - 2648:map的遍历
#include<iostream>
#include<map>
#include<string>
using namespace std;
int main()
{
int n,m,p;
map<string,int>shop;
while(cin>>n)
{
string s;
for(int i=;i<=n;++i)cin>>s;
cin>>m;
while(m--)
{
for(int i=;i<=n;++i)
{
cin>>p>>s;
shop[s]+=p;
}
int rank =;
map<string,int>::iterator it;
for(it=shop.begin();it!=shop.end();it++)
{
if(it->second>shop["memory"])
{
rank++;
}
}
cout<<rank<<endl;
}
shop.clear();
} return ; }
I - Ignatius and the Princess II HDU - 1027:next_permutation
#include<iostream>
#include<map>
#include<string>
#include<list>
#include<algorithm>
using namespace std;
int a[];
int main()
{
int m,n;
while(cin>>n>>m)
{
for(int i=;i<=n;++i) a[i]=i;
int b=;
do
{
if(b==m)break;
b++;
}while(next_permutation(a+,a+n+));
for(int i=;i<n;++i)
{
cout<<a[i]<<" ";
}
cout<<a[n]<<endl;
}
return ;
}
J - 排列2 HDU - 1716
#include<iostream>
#include<map>
#include<string>
#include<list>
#include<vector>
#include<algorithm>
#include<set>
#include<string.h>
using namespace std;
int main()
{
while()
{
int num[]={};
vector<int> m[];
int index[];
memset(index,,sizeof(int)*);
int count=;
map<int,bool> visit;//标记是否重复出现
set<int>s;
s.clear();
for(int i=;i<;++i)
{
cin>>num[i];
if(num[i]==)++count; //计算0的个数
index[num[i]]=;
}
if(count==)break;//如果有4个0就结束掉
sort(num,num+);
do
{
int str=;
if(num[]==)continue;
for(int i=;i<;++i)
{
str+=num[i];
str*=;
}
str/=;
// cout<<">>"<<str<<","<<visit[str]<<" ";
if(!visit[str])
{
m[num[]].push_back(str);
// cout<<"输入到导出表的:"<<"m["<<num[0]<<"]="<<str<<endl;
visit[str]=;
} }while(next_permutation(num,num+));
int i=,k=;
for(int j=;j<;++j)if(index[j])++k;
for(;i<=;++i)
{
if(index[i])
{
// cout<<"第一组"<<i<<endl;
index[i]=;
cout<<m[i][];
for(int j=;j<m[i].size();++j)
{
cout<<" "<<m[i][j];
}
k--;
cout<<endl;
}
if(k==)break;
}
for(;i<=;++i)
{ if(index[i])
{ index[i]=;
cout<<m[i][];
for(int j=;j<m[i].size();++j)
{
cout<<" "<<m[i][j];
}
}
}
cout<<endl;
} return ;
}
格式错误,不想改了,以后再说
贴一份AC:https://blog.csdn.net/leo6033/article/details/79249163
#include<stdio.h>
int a[],i;
void sum(int num[],int x1, int x2, int x3, int x4)
{
num[i++] = a[x1] * + a[x2] * + a[x3] * + a[x4];
num[i++] = a[x1] * + a[x2] * + a[x4] * + a[x3];
num[i++] = a[x1] * + a[x3] * + a[x2] * + a[x4];
num[i++] = a[x1] * + a[x3] * + a[x4] * + a[x2];
num[i++] = a[x1] * + a[x4] * + a[x2] * + a[x3];
num[i++] = a[x1] * + a[x4] * + a[x3] * + a[x2];
}
int main()
{
int p = ;
while (~scanf("%d %d %d %d", &a[], &a[], &a[], &a[]))
{
int num[] = { };
if (!a[] && !a[] && !a[] && !a[])
{
break;
}
if (p == )p = ;
else printf("\n");
i = ;
sum(num, , , , );
sum(num, , , , );
sum(num, , , , );
sum(num, , , , );
int temp,j;
for (i = ; i >; i--)
{
for (j = ; j < i-; j++)
{
if (num[j] > num[j + ])
{
temp = num[j];
num[j] = num[j + ];
num[j + ] = temp;
}
}
} for (i = ; i < ; i++)
{
//printf("%d ",num[i]);
if (num[i] != num[i + ]&&num[i]>)
{
printf("%d", num[i]);
if (num[i] / != num[i + ] / )
{
printf("\n");
}
else
{
printf(" ");
}
}
}
printf("%d\n", num[i]);
}
return ;
}
第一周训练 | STL和基本数据结构的更多相关文章
- STL 入门 (17 暑假集训第一周)
快速全排列的函数 头文件<algorithm> next_permutation(a,a+n) ---------------------------------------------- ...
- 20172328 2018-2019《Java软件结构与数据结构》第一周学习总结
20172328 2018-2019<Java软件结构与数据结构>第一周学习总结 概述 Generalization 本周学习了软件质量.数据结构以及算法分析的具体内容,主要依托于所用教材 ...
- 20172306 2018-2019 《Java程序设计与数据结构》第一周学习总结
20172306 2018-2019 <Java程序设计与数据结构(下)>第一周学习总结 教材学习内容总结 第一章 概述 (程序=数据结构+算法 软件=程序+软件工程) 1.1 软件质量 ...
- 20172306《Java程序设计与数据结构》第一周总结
20172306<Java程序设计>第一周学习总结 教材学习内容总结 本周主要学习<Android和Java>书中的第二十三章和第二十六章. 第二十三章:Android简介 A ...
- 20172302 《Java软件结构与数据结构》第一周学习总结
2018下半年学习总结博客总目录:第一周 教材学习内容总结 第一章 概述 1.软件质量 软件工程(Software Engineering)是一门关于高质量软件开发的技术和理论的学科. 软件质量从以下 ...
- 20172308《Java软件结构与数据结构》第一周学习总结
教材学习内容总结 第 1 章 概述 软件质量的特征:正确性.可靠性.健壮性.可用性.可维护性.可重用性(别人写的组件自己可以拿过来用).可移植性.运行效率 数据结构:计算机存储.组织数据的方式 程序 ...
- 《JAVA软件结构与数据结构》第一周学习总结
学号 20172326 <JAVA软件结构与数据结构>第一周学习总结 教材学习内容总结 软件质量的几大特性 增长函数与大O记法 大O记法用来表示表示增长函数,从而来表示算法的复杂度 算法的 ...
- 20172329 2018-2019《Java软件结构与数据结构》第一周学习总结
2018-2019-20172329 <Java软件结构与数据结构>第一周学习总结 在这学期就已经大二了,也已经步入了学习专业课的核心时间,在这个阶段,我们应该了解自己的学习情况,针对自己 ...
- 20172305 2018-2019-1 《Java软件结构与数据结构》第一周学习总结
20172305 2018-2019-1 <Java软件结构与数据结构>第一周学习总结 教材学习内容总结 本周内容主要为书第一章和第二章的内容: 第一章 软件质量: 正确性(软件达到特定需 ...
随机推荐
- Python 爬取淘宝商品数据挖掘分析实战
Python 爬取淘宝商品数据挖掘分析实战 项目内容 本案例选择>> 商品类目:沙发: 数量:共100页 4400个商品: 筛选条件:天猫.销量从高到低.价格500元以上. 爬取淘宝商品 ...
- MM理论
最初的MM理论,即由美国的Modigliani和Miller(简称MM)教授于1958年6月份发表于<美国经济评论>的“资本结构.公司财务与资本”一文中所阐述的基本思想.该理论认为,在不考 ...
- window.open弹窗阻止问题解决之道
https://segmentfault.com/a/1190000015381923https://segmentfault.com/a/1190000014988094https://www.cn ...
- [USACO 2008 Jan. Silver]架设电话线 —— 最短路+二分
一道图论的最短路题.一开始连最短路都没想到,可能是做的题太少了吧,完全没有思路. 题目大意: FJ的农场周围分布着N根电话线杆,任意两根电话线杆间都没有电话线相连.一共P对电话线杆间可以拉电话线,第i ...
- sql select as
as 可理解为:用作.当成,作为:一般式重命名列名或者表名.例如有表table, 列 column_1,column_2 你可以写成 select column_1 as 列1,column_2 as ...
- Segment tree Beats
Segment tree Beats Segment tree Beats,吉司机线段树,主要是关于如何用线段树实现区间取min/max.我们先看一道例题: HDU5306 Gorgeous Sequ ...
- 在 linux 中 find 和 grep 的区别??
Linux 系统中 grep 命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来.grep 全称是 Global Regular Expression Print,表示全局 ...
- Sublime text设置快捷键让编写的HTML文件在打指定浏览器预览
作者:浪人链接:https://www.zhihu.com/question/27219231/answer/43608776来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出 ...
- canvas画随机的四位验证码
效果图如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...
- 总结const、readonly、static三者的区别【收藏、转载】20190614
总结const.readonly.static三者的区别 const:静态常量,也称编译时常量(compile-time constants),属于类型级,通过类名直接访问,被所有对象共享! a.叫编 ...