A - 简单计算器

模拟加栈。。写一写就好,从头到尾扫一遍,分两个栈存,一个存运算符,一个存中间结果,遇到乘除就先处理了,每次遇到加减就处理上一个加减的两个数,结果压进去。。。同时把这个运算符存进去。最后再来个循环把运算符清完。。

 #include<cstdio>
#include<cstring>
#include<stack>
using namespace std;
int main()
{
int i;
double a,b;
char s[],c;
while(gets(s),strcmp(s,"")!=)
{
stack<char>s1;
stack<double>s2;
for(i=;s[i];i++)
{
if(s[i]>=''&&s[i]<='')
{
a=;
while(s[i]>=''&&s[i]<='')
{
a=a*+s[i]-'';
i++;
}
i--;
s2.push(a);
}
else if(s[i]=='-'||s[i]=='+')
{
if(!s1.empty())
{
c=s1.top();
s1.pop();
a=s2.top();
s2.pop();
b=s2.top();
s2.pop();
if(c=='+')
a+=b;
else
a=b-a;
s2.push(a);
s1.push(s[i]);
}
else
s1.push(s[i]);
}
else if(s[i]=='/')
{
b=;
i+=;
while(s[i]>=''&&s[i]<='')
{
b=b*+s[i]-'';
i++;
}
i--;
a=s2.top();
s2.pop();
a=a/b;
s2.push(a);
}
else if(s[i]=='*')
{
b=;
i+=;
while(s[i]>=''&&s[i]<='')
{
b=b*+s[i]-'';
i++;
}
i--;
a=s2.top();
s2.pop();
a=a*b;
s2.push(a);
}
}
while(!s1.empty())
{
c=s1.top();
s1.pop();
a=s2.top();
s2.pop();
b=s2.top();
s2.pop();
if(c=='+')
a+=b;
else
a=b-a;
s2.push(a);
}
printf("%.2f\n",s2.top());
}
return ;
}

B - ACboy needs your help again!

无脑队列,栈,刚开始WA了一发是因为没有清空栈队列。。

C - Ugly Numbers

这个题我本来是写扫一遍的算法。。但是那样很明显会超时,所以乘2,3,5?似乎可以拿优先队列来写……但我觉得用不着……

 #include<cstdio>
#include<iostream>
#include<cmath>
#include<algorithm>
#define N 100000
#define ll long long
using namespace std;
bool check(ll x)
{
if(x<&&x!=) return false;
for(ll i=;i<floor(sqrt((double)x));++i)
if(x%i==) return false;
return true;
}
ll a[];
int main()
{
ll t=,q2=,q3=,q5=;a[]=;
//for(int i=1;i<=6;++i) a[i]=i;
while()
{
int n;
scanf("%d",&n);
if(n==) break;
while(t<n)
{
a[++t]=min(min(a[q2]*,a[q3]*),a[q5]*);
if(a[t]==a[q2]*) q2++;
if(a[t]==a[q3]*) q3++;
if(a[t]==a[q5]*) q5++;
}
printf("%lld\n",a[n]);
}
return ;
}

D - Rails

题目意思是给定一个火车出站序列,问能不能实现,由于其后进后出的模式,自然用栈。每次一个火车进站,都去看一看现在栈顶的火车能不能对的上当前应该出站的火车序号,能对的上就pop,最后全部push进去后,如果栈没空,则无法实现。简单的栈应用。

WA了两发是因为读入写残了emmmm

E - Black Box

这个题是要在向一个序列中添加元素的时候,输出第i小的数,是在输入过程中进行排序,用sort大概会炸吧。。其实用两个优先队列可以解决,一个存前i个数,大根堆,另一个小根堆存后面的数,这样可以保证大根堆的顶存的就是第i个小的数;

注意优先队列的写法。。orz

 #include<cstdio>
#include<cstring>
#include<iostream>
#include<cmath>
#include<vector>
#include<queue>
#include<stack>
#include<algorithm>
#define N 100000
#define ll long long
using namespace std;
priority_queue<int,vector<int>,less<int> >q1;
priority_queue<int,vector<int>,greater<int> >q2;
int a[],b[];
void sock(int d)
{
while(q1.size()>d) {
q2.push(q1.top());q1.pop();
}
while(q1.size()<d)
{
q1.push(q2.top());q2.pop();
}
}
void add1(int x)
{
if(q1.empty()){ q1.push(x);return;
}
if(x>q1.top()) q2.push(x);
else q1.push(x);
}
int main()
{
int n,m;
cin>>n>>m;
for(int i=;i<=n;++i) scanf("%d",&a[i]);
for(int i=;i<=m;++i) scanf("%d",&b[i]);
int k=,get=;
for(int i=;i<=n;++i)
{
add1(a[i]);
while(b[get]==i&&get<=m)
{
get++;k++;
sock(k);
cout<<q1.top()<<endl;
}
}
}

F - Fence Repair

emmmme就是一个合并果子嘛。。刚开始想的鬼畜算法WA了,

G - Running Median

和E是一个道理,但是比E简单一点,因为只要求中位数就行了。。基本固定吧,

 #include<cstdio>
#include<cstring>
#include<iostream>
#include<cmath>
#include<vector>
#include<queue>
#include<stack>
#include<algorithm>
#define N 100000
#define ll long long
using namespace std;
priority_queue<int,vector<int>,greater<int> > qa;//小根堆存比中位数大的数
priority_queue<int,vector<int>,less<int> > qb;//大根堆存小于中位数的数
void add(int x)
{
if(qa.empty())
{
qa.push(x);return;
}
if(x>qa.top()) qa.push(x);
else qb.push(x);
while(qa.size()<qb.size())
{
qa.push(qb.top());qb.pop();
}
while(qa.size()>qb.size()+)
{
qb.push(qa.top());qa.pop();
}
}
int a[];
int main()
{
int T,index,n,x;
cin>>T;
while(T--)
{
while(!qa.empty()) qa.pop();
while(!qb.empty()) qb.pop();
int t=;
scanf("%d %d",&index,&n);
for(int i=;i<=n;++i)
{
scanf("%d",&x);
add(x);
if(i%) a[++t]=qa.top();
}
printf("%d %d\n",index,(n+)/);
for(int i=;i<=t;++i)
{
printf("%d",a[i]);
if(i>&&i%==) printf("\n");
if(i%) printf(" ");
}
if(t%) printf("\n");
}
}

J - Train Problem I

和D一个道理,多了一个标记。

K - 看病要排队

    显然优先队列,优先队列中对于结构体需要自己手写重载。。我还是写带有友元函数的重载吧。。。总结里写

 #include<cstdio>
#include<cstring>
#include<iostream>
#include<cmath>
#include<vector>
#include<queue>
#include<stack>
#include<algorithm>
#define N 100000
#define ll long long
using namespace std;
struct patient{
int cla,id;
bool operator < (const patient& p1) const
{
if(cla!=p1.cla) return cla<p1.cla;
else return id>p1.id;
}
};
int main()
{
int n;string comm;
while(~scanf("%d",&n))
{
priority_queue<patient>doctor[];
int id=;
for(int i=;i<=n;++i)
{
cin>>comm;
if(comm=="IN")
{
int x,y;
scanf("%d%d",&x,&y);
patient p1;
p1.cla=y;p1.id=id;
id++;
doctor[x].push(p1);
}
else
{
int x;
scanf("%d",&x);
if(doctor[x].empty()) printf("EMPTY\n");
else
{
printf("%d\n",doctor[x].top().id);
doctor[x].pop();
}
}
}
}
}

L - Team Queue

这个题用到了图啊。而我一点没想?WA一发是初始化出现了问题

 #include<cstdio>
#include<cstring>
#include<iostream>
#include<cmath>
#include<vector>
#include<queue>
#include<stack>
#include<algorithm>
#include<map>
#define N 100000
#define ll long long
using namespace std;
int main()
{
int t,cas=;
while(cin>>t&&t)
{
int n,x;
queue<int> q1,q2[];
while(!q1.empty()) q1.pop();
for(int i=;i<;++i)
{
while(!q2[i].empty()) q2[i].pop();
}
cout<<"Scenario #"<<cas++<<endl;
map<int,int> team;
for(int i=;i<t;++i)
{
cin>>n;
while(n--)
{
cin>>x;team[x]=i;
}
}
string s;
for(;;)
{
cin>>s;
if(s[]=='S') break;
else if(s[]=='D')
{
int hh=q1.front();
cout<<q2[hh].front()<<endl;
q2[hh].pop();
if(q2[hh].empty()) q1.pop();
}
else if(s[]=='E')
{
cin>>x;
int hh=team[x];
if(q2[hh].empty()) q1.push(hh);
q2[hh].push(x);
}
}
cout<<endl;
}
}

M - Windows Message Queue

和K差不多吧。。WA一发是因为ID写错了。。

 #include<cstdio>
#include<cstring>
#include<iostream>
#include<cmath>
#include<vector>
#include<queue>
#include<stack>
#include<algorithm>
#define N 100000
#define ll long long
using namespace std;
struct Msg{
string name;
int pa,pr,id;
friend bool operator < (Msg p1,Msg p2)
{
if(p1.pr!=p2.pr) return p1.pr>p2.pr;
else return p1.id>p2.id;
}
};
priority_queue<Msg> msg;
int main()
{
string s;
int id=;
while(cin>>s)
{
if(s=="GET")
{
if(msg.empty()) printf("EMPTY QUEUE!\n");
else
{
cout<<msg.top().name<<" "<<msg.top().pa<<endl;
msg.pop();
}
}
else
{
Msg p;
cin>>p.name>>p.pa>>p.pr;
p.id=id++;
msg.push(p);
}
}
}

冬训day3 简单数据结构的更多相关文章

  1. python学习总结----简单数据结构

    mini-web服务器 - 能够完成简单的请求处理 - 使用http协议 - 目的:加深对网络编程的认识.为后面阶段学习web做铺垫 简单数据结构 - 排列组合 import itertools # ...

  2. 牛客练习赛22-E.简单数据结构1(扩展欧拉定理降幂 +树状数组)

    链接:E.简单数据结构1 题意: 给一个长为n的序列,m次操作,每次操作: 1.区间加 2.对于区间,查询 ,一直到- 请注意每次的模数不同.   题解:扩展欧拉定理降幂 对一个数p取log(p)次的 ...

  3. [LOJ#2326]「清华集训 2017」简单数据结构

    [LOJ#2326]「清华集训 2017」简单数据结构 试题描述 参加完IOI2018之后就是姚班面试.而你,由于讨厌物理.并且想成为乔布斯一样的创业家,被成功踢回贵系. 转眼,时间的指针被指向201 ...

  4. 简单数据结构题(from 钟子谦——IOI2018集训队自选题)

    简单数据结构题(from 钟子谦--IOI2018集训队自选题) 试题描述 给一棵 \(n\) 个点的树,点权开始为 \(0\) ,有 \(q\) 次操作,每次操作是选择一个点,把周围一圈点点权 \( ...

  5. 简单数据结构———AVL树

    C - 万恶的二叉树 Crawling in process... Crawling failed Time Limit:1000MS     Memory Limit:32768KB     64b ...

  6. NYOJ 简单数据结构

    NYOJ 2 括号配对问题 栈的简单应用.可使用STL. #include <iostream> #include <cstdio> #include <cstring& ...

  7. Test 6.29 T4 简单数据结构练习

    问题描述 费了一番功夫,神犇 CJK 终于完成了前三道题目."不错,不愧是新一代神犇啊!" JesseLiu 满意地说道,"不过,你在算法方面的功底固然不错.对于数据结构 ...

  8. [Contest20171102]简单数据结构题

    给一棵$n$个点的数,点权开始为$0$,有$q$次操作,每次操作选择一个点,把周围一圈点点权$+1$,在该操作后你需要输出当前周围一圈点点权的异或和. 由于输出量较大,设第$i$个询问输出为$ans_ ...

  9. UOJ228 简单数据结构练习题

    Description 传送门 维护一个数列, 有以下操作: 对[l,r]同时加上x 把[l,r]开根后下取整. 查询[l,r]之和 n,m \(\leq\)$ 100000, $\(a_i,x \l ...

随机推荐

  1. c语言中--typeof--关键字用法

    C语言中 typeof 关键字是用来定义变量数据类型的.在linux内核源代码中广泛使用. 下面是Linux内核源代码中一个关于typeof实例: #define min(x, y) ({ \ typ ...

  2. 微信小游戏 demo 飞机大战 代码分析 (三)(spirit.js, animation.js)

    微信小游戏 demo 飞机大战 代码分析(三)(spirit.js, animation.js) 微信小游戏 demo 飞机大战 代码分析(一)(main.js) 微信小游戏 demo 飞机大战 代码 ...

  3. 第八篇:ORM框架SQLAlchemy 了解知识

    一 介绍 SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据API执行SQL并获取 ...

  4. hprose 1.0(rpc 框架) - 内部数据标准

    hprose 1.0 内部数据标准 方法的描述  {    // 请求调用格式    'C'.writeString('method1').'a'.count($params).'{'.'m'.cou ...

  5. 科学计算库Numpy——排序

    矩阵按维度排序 使用np.sort()进行排序. 排序索引值 使用np.argsort()排序,返回排序后的索引值. 备注:array1[1,2]=1.2,array1[1,0]=5.6,array1 ...

  6. ActiveMQ发布-订阅消息模式(同点对点模式的区别)

    点对点与发布订阅最初是由JMS定义的.这两种模式主要区别或解决的问题就是发送到队列的消息能否重复消费(多订阅) 点对点: 消息生产者生产消息发送到queue中,然后消息消费者从queue中取出并且消费 ...

  7. 学习Spring框架系列(一):通过Demo阐述IoC和DI的优势所在

    Spring框架最核心东西便是大名鼎鼎的IoC容器,主要通过DI技术实现.下面我通过Demo的演变过程,对比学习耦合性代码,以及解耦和的过程,并深入理解面向接口编程的真正内涵. 这个例子包括如下几个类 ...

  8. ACM-ICPC 2018 徐州赛区网络预赛

    A. Hard to prepare #include <bits/stdc++.h> using namespace std; ; ]; ]; int main() { int T; i ...

  9. POJ 2586 贪心+枚举

    Y2K Accounting Bug Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 15626   Accepted: 78 ...

  10. B1020 月饼(25 分)

    B1020 月饼(25 分) 月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼.现给定所有种类月饼的库存量.总售价.以及市场的最大需求量,请你计算可以获得的最大收益是多少. 注意 ...