看病要排队

 

Problem Description

看病要排队这个是地球人都知道的常识。 
不过经过细心的0068的观察,他发现了医院里排队还是有讲究的。0068所去的医院有三个医生(汗,这么少)同时看病。而看病的人病情有轻重,所以不能根据简单的先来先服务的原则。所以医院对每种病情规定了10种不同的优先级。级别为10的优先权最高,级别为1的优先权最低。医生在看病时,则会在他的队伍里面选择一个优先权最高的人进行诊治。如果遇到两个优先权一样的病人的话,则选择最早来排队的病人。

现在就请你帮助医院模拟这个看病过程。

Input

输入数据包含多组测试,请处理到文件结束。 
每组数据第一行有一个正整数N(0<N<2000)表示发生事件的数目。 
接下来有N行分别表示发生的事件。 
一共有两种事件: 
1:"IN A B",表示有一个拥有优先级B的病人要求医生A诊治。(0<A<=3,0<B<=10) 
2:"OUT A",表示医生A进行了一次诊治,诊治完毕后,病人出院。(0<A<=3)

Output

对于每个"OUT A"事件,请在一行里面输出被诊治人的编号ID。如果该事件时无病人需要诊治,则输出"EMPTY"。 
诊治人的编号ID的定义为:在一组测试中,"IN A B"事件发生第K次时,进来的病人ID即为K。从1开始编号。

Sample Input

IN
IN
OUT
OUT
IN
OUT
OUT IN
OUT

Sample Output

EMPTY

按医生的编号用优先队列数组就行

 #include <stdio.h>
#include <string.h>
#include <algorithm>
#include <queue> using namespace std; struct person{
int num;
int pri; }; struct cmp{
bool operator()(person a,person b){
if(a.pri!=b.pri)
return a.pri<b.pri;
else
return a.num>b.num;
}
}; int main()
{
//freopen("sample.txt","r",stdin);
int n;
while(~scanf("%d",&n))
{
int num=;
priority_queue<person,vector<person>,cmp > qe[];
char str[];
while(n--)
{
scanf("%s",str);
if(strcmp(str,"IN")==)
{
person p;
int a,b;
num++;
scanf("%d %d",&a,&b);
p.num=num;
p.pri=b;
qe[a].push(p);
}
if(strcmp(str,"OUT")==)
{
person p;
int a;
scanf("%d",&a);
if(qe[a].empty())
printf("EMPTY\n");
else
{
p=qe[a].top();
qe[a].pop();
printf("%d\n",p.num);
}
}
}
}
return ;
}

水果

http://acm.hdu.edu.cn/showproblem.php?pid=1263

Problem

夏天来了~~好开心啊,呵呵,好多好多水果~~ 
Joe经营着一个不大的水果店.他认为生存之道就是经营最受顾客欢迎的水果.现在他想要一份水果销售情况的明细表,这样Joe就可以很容易掌握所有水果的销售情况了. 

Input第一行正整数N(0<N<=10)表示有N组测试数据. 
每组测试数据的第一行是一个整数M(0<M<=100),表示工有M次成功的交易.其后有M行数据,每行表示一次交易,由水果名称(小写字母组成,长度不超过80),水果产地(小写字母组成,长度不超过80)和交易的水果数目(正整数,不超过100)组成. 
Output对于每一组测试数据,请你输出一份排版格式正确(请分析样本输出)的水果销售情况明细表.这份明细表包括所有水果的产地,名称和销售数目的信息.水果先按产地分类,产地按字母顺序排列;同一产地的水果按照名称排序,名称按字母顺序排序. 
两组测试数据之间有一个空行.最后一组测试数据之后没有空行.

Sample Input


apple shandong
pineapple guangdong
sugarcane guangdong
pineapple guangdong
pineapple guangdong

Sample Output

guangdong
|----pineapple()
|----sugarcane()
shandong
|----apple()

主要用了map的嵌套

 #include <stdio.h>
#include <iostream>
#include <string.h>
#include <string>
#include <algorithm>
#include <map> using namespace std; int main()
{
//freopen("sample.txt","r",stdin);
int n;
cin>>n;
for(int i=;i<n;i++)
{
if(i!=)
cout<<endl;
int m;
cin>>m;
map<string,map<string,int> > mp;
map<string,map<string,int> >::iterator it1;
map<string,int>::iterator it2;
while(m--)
{
string st1,st2;
int a;
cin>>st1>>st2>>a;
mp[st2][st1]+=a; //记住这种方式
}
for(it1=mp.begin();it1!=mp.end();it1++)
{
cout<<it1->first<<endl;
for(it2=it1->second.begin();it2!=it1->second.end();it2++)
{
cout<<" |----"<<it2->first<<"("<<it2->second<<")"<<endl;
}
}
}
return ;
}

Ugly Numbers

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

Problem Description

Ugly numbers are numbers whose only prime factors are 2, 3 or 5. The sequence

1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, ...

shows the first 11 ugly numbers. By convention, 1 is included. Write a program to find and print the 1500’th ugly number.

Input

There is no input to this program.

Output

Output should consist of a single line as shown below, with ‘<number>’ replaced by the number computed.

Sample Output

The 1500'th ugly number is <number>.

第一次读题的时候,以为只要可以被2,3,5除尽的就是丑数,所以先后用5,3,2对待判断数取余,最后判断是否余0就行了,但是丑数是不能有除2,3,5,之外的素数因子,是允许有合数因子的。

从1开始,丑数的2,3,5倍也都是丑数,每求出一个丑数的倍数,用set来去重,如果set中没有,扔优先队列和set中。每次从优先队列中取出的数就是这次的丑数,判断是否是第1500个。

是的话输出,不是的话求出它的2,3,5倍,重复下去。。。。。。。。

记得要用 long long

 #include <stdio.h>
#include <algorithm>
#include <queue>
#include <set>
using namespace std; typedef long long LL;
int S[]={,,};
priority_queue<LL,vector<LL>, greater<LL> > q;
set<LL> st; int main()
{
q.push();
st.insert();
for(int i=;;i++)
{
LL t=q.top();
q.pop();
if(i==)
{
printf("The 1500'th ugly number is %lld.\n",t);
break;
}
for(int j=;j<;j++)
{
if(!st.count(t*S[j]))
{
q.push(t*S[j]);
st.insert(t*S[j]);
}
}
}
return ;
}

士兵队列训练问题

http://acm.hdu.edu.cn/showproblem.php?pid=1276

Problem

某部队进行新兵队列训练,将新兵从一开始按顺序依次编号,并排成一行横队,训练的规则如下:从头开始一至二报数,凡报到二的出列,剩下的向小序号方向靠拢,再从头开始进行一至三报数,凡报到三的出列,剩下的向小序号方向靠拢,继续从头开始进行一至二报数。。。,以后从头开始轮流进行一至二报数、一至三报数直到剩下的人数不超过三人为止。 

Input

本题有多个测试数据组,第一行为组数N,接着为N行新兵人数,新兵人数不超过5000。

Output

共有N行,分别对应输入的新兵人数,每行输出剩下的新兵最初的编号,编号之间有一个空格。

Sample Input


Sample Output

  

这题有点坑啊,第一次没过去,主要是以为当n小于3的话,至少也要报一轮吧,就wa了。

原来当n<=3时就不用了报数了,直接输出就好了。。。。。。。。。。。。。

 #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <algorithm>
#include <vector> using namespace std; int Flag[];
int New[];
int B[]={,}; int main()
{
int a;
while(~scanf("%d",&a))
{
while(a--)
{
memset(Flag,,sizeof(Flag));
memset(New,,sizeof(New));
int n;
scanf("%d",&n);
int sum=n;
for(int i=;i<=n;i++)
{
Flag[i]=;
New[i]=i;
}
for(int i=;;i++)
{
if(sum<=)
{
int cc=;
for(int g=;g<=n;g++)
{
if(Flag[g])
{
if(cc==)
{
cc++;
printf("%d",g);
}
else
printf(" %d",g);
}
}
printf("\n");
break;
}
int count=;
for(int j=;j<=n;j++)
{ if(Flag[j])
{
count++;
// printf("i=%d j=%d count=%d \n",i,j,count);
} if(Flag[j]&&count==B[i%])
{
sum--;
Flag[j]=;
count=;
}
}
}
}
}
return ;
}

排列2

http://acm.hdu.edu.cn/showproblem.php?pid=1716

Problem Description

Ray又对数字的列产生了兴趣: 
现有四张卡片,用这四张卡片能排列出很多不同的4位数,要求按从小到大的顺序输出这些4位数。 

Input

每组数据占一行,代表四张卡片上的数字(0<=数字<=9),如果四张卡片都是0,则输入结束。

Output

对每组卡片按从小到大的顺序输出所有能由这四张卡片组成的4位数,千位数字相同的在同一行,同一行中每个四位数间用空格分隔。 
每组输出数据间空一行,最后一组数据后面没有空行。

Sample Input


Sample Output


这题不难用全排列next_permutation,主要就是格式的问题,格式弄了好久

 #include <stdio.h>
#include <string.h>
#include <iostream>
#include <string>
#include <algorithm>
#include <set>
using namespace std; int main()
{
//freopen("sample.txt","r",stdin);
int a[];
int flag=;
while(~scanf("%d %d %d %d",&a[],&a[],&a[],&a[])&&(a[]!=||a[]!=||a[]!=||a[]!=))
{
if(flag)
printf("\n");
flag=;
set<int> st;
do{
if(st.empty())
{
if(a[])
{
st.insert(a[]);
printf("%d%d%d%d",a[],a[],a[],a[]);
}
}
else
{
if(st.count(a[]))
{
if(a[])
printf(" %d%d%d%d",a[],a[],a[],a[]);
}
else
{
printf("\n");
st.insert(a[]);
if(a[])
printf("%d%d%d%d",a[],a[],a[],a[]);
}
}
}while(next_permutation(a,a+));
printf("\n");
}
return ;
}

Blue Jeans

http://poj.org/problem?id=3080

Description

The Genographic Project is a research partnership between IBM and The National Geographic Society that is analyzing DNA from hundreds of thousands of contributors to map how the Earth was populated.

As an IBM researcher, you have been tasked with writing a program that will find commonalities amongst given snippets of DNA that can be correlated with individual survey information to identify new genetic markers.

A DNA base sequence is noted by listing the nitrogen bases in the order in which they are found in the molecule. There are four bases: adenine (A), thymine (T), guanine (G), and cytosine (C). A 6-base DNA sequence could be represented as TAGACC.

Given a set of DNA base sequences, determine the longest series of bases that occurs in all of the sequences.

Input

Input to this problem will begin with a line containing a single integer n indicating the number of datasets. Each dataset consists of the following components:

  • A single positive integer m (2 <= m <= 10) indicating the number of base sequences in this dataset.
  • m lines each containing a single base sequence consisting of 60 bases.

Output

For each dataset in the input, output the longest base subsequence common to all of the given base sequences. If the longest common subsequence is less than three bases in length, display the string "no significant commonalities" instead. If multiple subsequences of the same longest length exist, output only the subsequence that comes first in alphabetical order.

Sample Input


GATACCAGATACCAGATACCAGATACCAGATACCAGATACCAGATACCAGATACCAGATA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA GATACCAGATACCAGATACCAGATACCAGATACCAGATACCAGATACCAGATACCAGATA
GATACTAGATACTAGATACTAGATACTAAAGGAAAGGGAAAAGGGGAAAAAGGGGGAAAA
GATACCAGATACCAGATACCAGATACCAAAGGAAAGGGAAAAGGGGAAAAAGGGGGAAAA CATCATCATCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
ACATCATCATAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AACATCATCATTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT

Sample Output

no significant commonalities
AGATAC
CATCATCAT

题目大意:

给定多组样例,每组样例有n个长度为60的字符串,求这n个字符串中长度最长的公共子串,如果有多个这样的子串,按照字典序输出

思路:可以用KMP算法解决

从第一个主串开始查找其中的每一个子串是不是在其他子串中可以找到,如果能找到,看长度大小,如果跟最大的相同,则找字典序小的那个
注意到,这个题给的数据范围很小,m不大于10,长度不大于60,吐过暴力枚举的话,复杂度大概是60*60*10*(60+60),不会爆,所以果断枚举

 #include <stdio.h>
#include <string.h>
#include <iostream>
#include <string>
#include <algorithm> using namespace std; int main()
{
//freopen("sample.txt","r",stdin);
int n;
scanf("%d",&n);
while(n--)
{
char str[][];
char ans[];
ans[]=;//别忘了,忘了就是wa
int m;
scanf("%d",&m);
getchar();
for(int i=;i<m;i++)
{
gets(str[i]);
}
for(int i=;i<=strlen(str[]);i++)
{
int af=;
for(int j=;j<=strlen(str[])-i;j++)
{
int flag=;
char ttm[];
strncpy(ttm,str[]+j,i);
ttm[i]=;
for(int g=;g<m;g++)
{
if(!strstr(str[g],ttm))
{
flag=;
break;
}
}
if(flag)
{
af=;
if(strlen(ttm)>strlen(ans))
strcpy(ans,ttm);
else if(strlen(ttm)==strlen(ans)&&strcmp(ttm,ans)<)
strcpy(ans,ttm);
}
}
if(!af)
break;
}
if(strlen(ans)<)
printf("no significant commonalities\n");
else
puts(ans);
}
return ;
}

Fence Repair

http://poj.org/problem?id=3253

Description

Farmer John wants to repair a small length of the fence around the pasture. He measures the fence and finds that he needs N (1 ≤ N ≤ 20,000) planks of wood, each having some integer length Li (1 ≤ Li ≤ 50,000) units. He then purchases a single long board just long enough to saw into the N planks (i.e., whose length is the sum of the lengths Li). FJ is ignoring the "kerf", the extra length lost to sawdust when a sawcut is made; you should ignore it, too.

FJ sadly realizes that he doesn't own a saw with which to cut the wood, so he mosies over to Farmer Don's Farm with this long board and politely asks if he may borrow a saw.

Farmer Don, a closet capitalist, doesn't lend FJ a saw but instead offers to charge Farmer John for each of the N-1 cuts in the plank. The charge to cut a piece of wood is exactly equal to its length. Cutting a plank of length 21 costs 21 cents.

Farmer Don then lets Farmer John decide the order and locations to cut the plank. Help Farmer John determine the minimum amount of money he can spend to create the N planks. FJ knows that he can cut the board in various different orders which will result in different charges since the resulting intermediate planks are of different lengths.

Input

Line 1: One integer N, the number of planks 
Lines 2..N+1: Each line contains a single integer describing the length of a needed plank

Output

Line 1: One integer: the minimum amount of money he must spend to make N-1 cuts

Sample Input


Sample Output


Hint

He wants to cut a board of length 21 into pieces of lengths 8, 5, and 8. 
The original board measures 8+5+8=21. The first cut will cost 21, and should be used to cut the board into pieces measuring 13 and 8. The second cut will cost 13, and should be used to cut the 13 into 8 and 5. This would cost 21+13=34. If the 21 was cut into 16 and 5 instead, the second cut would cost 16 for a total of 37 (which is more than 34).

思路:堆,用优先队列就可以做

 #include <stdio.h>
#include <string.h>
#include <iostream>
#include <string>
#include <algorithm>
#include <queue>
using namespace std; typedef long long LL; int main()
{
int n;
while(~scanf("%d",&n))
{
priority_queue<LL,vector<LL>,greater<LL> > qe;
for(int i=;i<n;i++)
{
int t;
scanf("%d",&t);
qe.push(t);
}
LL sum=;
while(qe.size()>)
{
int a=qe.top();
qe.pop();
int b=qe.top();
qe.pop();
sum=sum+a+b;
qe.push(a+b);
}
printf("%lld\n",sum);
}
return ;
}

STL入门练习的更多相关文章

  1. STL入门

    STL入门 STL的组成 六大组件 容器container 算法algorithm 迭代器iterator 仿函数function object 适配器adaptors 空间配制器allocator ...

  2. 20140725 快速排序时间复杂度 sTL入门

    1.快速排序的时间复杂度(平均时间复杂度为) 数组本身就有序时,效果很差为O(n^2) 2.STl入门 (1) C++内联函数(inline)和C中宏(#define)区别 内联函数有类型检查,宏定义 ...

  3. STL入门大全(待编辑)

    前言:这个暑假才接触STL,仿佛开启了新世界的大门(如同学完结构体排序一般的快乐\(≧▽≦)/),终于彻底领悟了大佬们说的“STL大法好”(虽然我真的很菜www现在只学会了一点点...)这篇blog主 ...

  4. 跟我学STL系列(1)——STL入门介绍

    一.引言 最近这段时间一直都在自学C++,所以这里总结下自己这段时间的学习过程,通过这种方式来巩固自己学到的内容和以备后面复习所用,另外,希望这系列文章可以帮助到其他自学C++的朋友们. 由于本人之前 ...

  5. 【c++】标准模板库STL入门简介与常见用法

    一.STL简介 1.什么是STL STL(Standard Template Library)标准模板库,主要由容器.迭代器.算法.函数对象.内存分配器和适配器六大部分组成.STL已是标准C++的一部 ...

  6. [技术] OIer的STL入门教程

    注: 本文主要摘取STL在OI中的常用技巧应用, 所以可能会重点说明容器部分和算法部分, 且不会讨论所有支持的函数/操作并主要讨论 C++11 前支持的特性. 如果需要详细完整的介绍请自行查阅标准文档 ...

  7. [技术] OIer的C++标准库 : STL入门

    注: 本文主要摘取STL在OI中的常用技巧应用, 所以可能会重点说明容器部分和算法部分, 且不会讨论所有支持的函数/操作并主要讨论 C++11 前支持的特性. 如果需要详细完整的介绍请自行查阅标准文档 ...

  8. STL 入门 (17 暑假集训第一周)

    快速全排列的函数 头文件<algorithm> next_permutation(a,a+n) ---------------------------------------------- ...

  9. stl入门--reverse函数

    #include<iostream> #include<algorithm>          using namespace std; int main() {     ch ...

  10. STL入门2

    1:给出n个字符串,输出每个字符串是第几个出现的字符串?多组数据 2:对每组数据,第一行输入n表示接下来有n个字符串 1 <= n <= 100000接下来的n行,每行输入一个非空的且长度 ...

随机推荐

  1. [题解] Luogu P4721 【模板】分治 FFT

    分治FFT的板子为什么要求逆呢 传送门 这个想法有点\(cdq\)啊,就是考虑分治,在算一段区间的时候,我们把他分成两个一样的区间,然后先做左区间的,算完过后把左区间和\(g\)卷积一下,这样就可以算 ...

  2. spring boot 环境配置(profile)切换

    Spring Boot 集成教程 Spring Boot 介绍 Spring Boot 开发环境搭建(Eclipse) Spring Boot Hello World (restful接口)例子 sp ...

  3. 「黑科技」智能消毒防疫机器人 技术方案介绍-disinfection robot

    消毒机器人 小新防疫消杀机器人 - 自主导航全方位360°臭氧杀菌消毒机器人,采用臭氧无阻碍.无死角.遍布整个空间除菌:强力涡轮风机,30㎡室内空气循环6次/h,10分钟速效杀菌.除异味.自动转化为氧 ...

  4. pandas dataframe取差集:删掉已存在的数据,保留未插入的数据

    适用场景: 插入数据到mysql中,中途中断,导致部分数据未插入成功.避免下次插入时插入了重复的数据. 思路: 1.读取已插入的数据, 2.读取全部数据(包含已插入和未插入的), 3.将已插入的数据添 ...

  5. POJ - 3279 Fliptile(反转---开关问题)

    题意:有一个M*N的网格,有黑有白,反转使全部变为白色,求最小反转步数情况下的每个格子的反转次数,若最小步数有多个,则输出字典序最小的情况.解不存在,输出IMPOSSIBLE. 分析: 1.枚举第一行 ...

  6. vnpy交易接口学习

    1.按照github中环境准备要求,配置好环境要求. https://github.com/vnpy/vnpy mongdb安装在D:\Program Files\MongoDB\Server\3.4 ...

  7. h5-transform二维变换-扑克牌小案例

    html代码:6张扑克牌 <div class="pkBox"> <img src="../img/pk1.jpg" alt="&q ...

  8. PL/SQL 连接oracle步骤

    下面就将PL/SQL的配置说明一下. 一.安装Oracle客户端,让后配置    安装目录下面的C:\ORACLE\instantclient_11_2\NETWORK\ADMIN 的 tnsname ...

  9. (转载)(DescriptionResource Path Location Type The superclass "javax.servlet.http.HttpServlet" was not foun

    eclipse环境下如何配置tomcat 打开Eclipse,单击"Window"菜单,选择下方的"Preferences". 单击"Server&q ...

  10. Nginx无法监听虚拟VIP的问题报:99: Cannot assign requested address

    99: Cannot assign requested address #本地网卡上没有10.0.0.3这个IPNginx就会报错: [root@lb01 conf]# /application/ng ...