Problem A: 小明在工作
Description
小明的工作是负责记录饭堂中正在排队的人的信息
在他的工作中会有三种可能的事件发生:
1.编号为id的学生加入到队伍的最后面
2.排在最前面的学生打完饭离开了队伍
3.老板过来询问当前排在队伍前方第k个的学生的编号
由于每天的工作量太大(每天最多有100000个以上事件发生),
小明苦不堪言,让你写个程序帮他
Input
输入的第一个数是正整数T,表明接下来有T组数据
每组数据的第一个数为正整数n,表示有n件事会发生
接下来有n行,每行分别表示上诉三种事件的其中一种,格式分别如下:
1 id
2
3 k
注意当队伍中已经没人的时候请忽略第2种事件,每组数据新开始的时候队伍中人数都为0
Output
对于给个第3种的事件,请输出第k个学生的编号,
如果队伍的人数小于k,输出“na li you zhe me duo ren”。
Sample Input
Sample Output
题意很简单,就是进去,出去,查询。关于随机访问的STL,可以使用vector。
#include <stdio.h> #include <iostream> #include <algorithm> #include <string.h> #include <math.h> #include <queue> #include <vector> using namespace std; vector<int>qe; int main() { int t, m; int k, n; while(~scanf("%d",&t)) { while(t --) { while(!qe.empty()) { qe.erase(qe.begin()); } scanf("%d",&m); for(int i = 0; i < m; i ++) { scanf("%d",&n); if(n == 1) { scanf("%d",&k); qe.push_back(k); } else if(n == 2) { if(qe.size() != 0) qe.erase(qe.begin()); } else if(n == 3) { scanf("%d",&k); if(k > qe.size()) printf("na li you zhe me duo ren\n"); else printf("%d\n",qe[k - 1]); } } } } } /************************************************************** Problem: 1114 Language: C++ Result: Accepted Time:224 ms Memory:1880 kb ****************************************************************/
Problem B: 神奇的编码
Description
假如没有阿拉伯数字,我们要怎么表示数字呢
小明想了一个方法如下:
1 -> A
2 -> B
3 -> C
....
25 -> Y
26 -> Z
27 -> AA
28 -> AB
....
现在请你写一个程序完成这个转换
Input
输入的第一个数为一个正整数T,表明接下来有T组数据。
每组数据为一个正整数n ( n <= 1000)
Output
对于每个正整数n,输出他对应的字符串
Sample Input
Sample Output
就是十进制转26(a~z)进制,注意顺序,A,B,....Z, AA ,AB,....AZ,BA,BB.....BZ.....ZZ , AAA,AAB........
#include <stdio.h> #include <iostream> #include <algorithm> #include <string.h> #include <math.h> #include <queue> #include <vector> #include <map> using namespace std; int main() { int T; int n; while(~scanf("%d",&T)) { while(T--) { scanf("%d",&n); if(n <= 26) { printf("%c\n",'A' + n - 1); continue; } if(n <= 26 + 26*26) { n -= 27; printf("%c%c\n",'A' + n/26,'A' + n%26); continue; } else { n -= (26 + 26*26 + 1); printf("%c%c%c\n",'A' + n/26/26,'A' + (n/26)%26,'A' + n%26); } } } return 0; }
Problem C: 丧心病狂的计数
Description
有一天,stubird发现了n个糖罐,里面有很多糖罐,很喜欢吃糖的Stubrid当然想吃最多的糖, 但是他只能带走k个,问他最多能带走多少颗糖?
Input
第一行T,表示有T(T<=50)个测试样例 第二行n,k,表示有n个罐子,最多只能带走k个罐子(k<=n<=10^5) 接下来n个数xi,表示第i个罐子里面有多少颗糖(0<=xi<=10^5 )
Output
一行,输出最多他能带走多少颗糖
Sample Input
Sample Output
#include <stdio.h> #include <iostream> #include <algorithm> #include <string.h> #include <math.h> #include <queue> #include <vector> #include <map> using namespace std; #define N 100010 int tt[N]; int main() { int t; int n, m; while(~scanf("%d",&t)) { while(t --) { memset(tt, 0, sizeof(tt)); long long int ans = 0; scanf("%d%d",&n,&m); for(int i = 0; i < n; i ++) { scanf("%d",&tt[i]); } sort(tt, tt + n); for(int i = n - 1; i >= n - m; i -- ) { ans += tt[i]; } printf("%lld\n",ans); } } } /************************************************************** Problem: 1117 Language: C++ Result: Accepted Time:244 ms Memory:1880 kb ****************************************************************/
Problem D: 01串也疯狂之光棍也有伴
Description
话说春节那天,小明和晓明在实验室刷题。刷着刷着小明觉得累了,就邀请晓明一起看春晚。晓明觉得小明很无聊,不想理小明,但是小明很会磨嘴皮子,晓明耐不住小明的胡嘴蛮缠,于是和小明一起看起春晚来。
小明顿时觉得倍儿爽啊! 可是一看,“wocao”,“最炫小苹果”,小明顿时觉得很伤心。 “连小苹果都有伴了。。。呜呜。。。。” 晓明看到小明哭了,就想安慰他,可是怎么安慰呢!
晓明陷入了沉思,忽然,晓明灵光一闪,想借一下出题名义,让小明开心起来。于是晓明对小明说,既然小苹果都有伴了,那我们两光棍离脱单也不远了吧! 。。。。噼噼啪啦,晓明对小明说不然我们也来让光棍有个伴吧! 正好,正值我们学校的校赛,我们就以光棍为名,来出一道题。小明听到要出题,立马起了劲。。。他们认为“11”是光棍成双成对的标志,于是, 小明和晓明想问下你们,对于一个长度为n的01串,到底有多少串是含有“11”子串的呢? 。。。聪明的你,相信你已想到怎么AC了。
例如长度为2的有“11”一个符合条件的01串;
长度为3的有“111”,“110”,“011”三个符合条件的串;
长度为4的有“1111”,“1101”,“1100”,“0011”,“1011”,“0111”,“0110”,“1110”八个符合条件的串。
Input
有T组数据输入。(T<=1000);
每组数据只有一行,一个正整数n(1<=n<=10^6)
Output
对于每组数据输出一行结果,对1000000007取模。
Sample Input
1
4
5
Sample Output
8
19
下次补上,还不会、、、
Problem E: Fire or Retreat
Description
在与科技水平远胜于我们的外星人的战斗最后,我们能够用来对外星装甲造成伤害的武器只剩下了……呃,一些迫击炮?
为了最大程度的节省弹药,下面一些事情,是你,一个新兵需要知道的:
1 每架迫击炮的发射动能都是一个固定值。这意味着同一架迫击炮发射出来的炮弹初始速率相同;
2 每架外星装甲都配备有隐形装置,隐形装置会有周期性的充能,也就是说一旦侦测到外星装甲,要么开火要么撤退;
3 每架迫击炮都可以以一定的角度射击.
现在你的任务就是对于每架侦测到的装甲,快速决定是射击还是撤退。一旦能够射击到外星装甲的话,当然是要开火的。 (重力加速度g=10m/s^2;,忽略其他外在因素)
Input
第一行输入一个整数T,代表接下来有多少个样例。 接下来有T行输入,每行有两个整数v、d(v <= 1000000m/s, d <= 1000000m),代表这架迫击炮的炮弹速率v和侦测到的外形装甲离你的水平距离d。
Output
对于每个样例,输出一行结果并换行。如果迫击炮发射的炮弹能够击中外星装甲,则输出“Fire”;否则,输出“Retreat”。
Sample Input
100 1000
17 300
Sample Output
Retreat
#include <stdio.h> #include <iostream> #include <algorithm> #include <string.h> #include <math.h> using namespace std; typedef long long LL; #define N 1010 int t; int main() { LL a, b; while(~scanf("%d",&t)) { while(t --) { scanf("%lld%lld",&a,&b); if(a*a >= b*10) printf("Fire\n"); else printf("Retreat\n"); } } return 0; }
Problem F: GG的匹配串
Description
2015年广东工业大学ACM校赛要来~\(≧▽≦)/~辣辣辣,作为校赛的出题人之一,GG想出了一道水题来考考大家。相信小伙伴们都学过字符串匹配,于是字符串匹配的水题就诞生辣!GG给出了一段长度为N的大写字母序列,现在他要你修改这一段字母序列,使得这段字母序列上最前面的K个字母组成的序列与最后面的K个字母组成的序列一一匹配。
例如对于序列“ATUUUUAC”和K = 2,可以通过将第二个字母修改为“C”,使得最前面的两个字母与最后面的两个字母都为“AC”,当然 还存在其他的修改方法,现在GG要求你求出要使字符串匹配至少需要修改多少个字母。
Input
有T组数据输入。(T <= 100)
每组数据只有两行,第一行为一个字符串,第二行为一个正整数K,字符串的长度不会超过1000,且至少为1。(1 <= K <= N)。
Output
对于每组数据输出至少需要修改的字母数量
Sample Input
ATUUUUAC
2
ATACGTCT
6
Sample Output
3
下次补上、、、
Problem G: 漂洋过海来看你
Description
Input
Output
Sample Input
10 1
1 9
1 8
8 10
10 3
8 6
1 2
10 4
9 5
3 7
Sample Output
#include<iostream> #include<cstdio> #include<cstring> #include<string> #include<vector> #include<algorithm> using namespace std; #define N 100010 int pre[N]; // 先前节点 vector<int>v[N]; void DFS(int cur) { for(int i = 0; i < v[cur].size(); ++i) { if(pre[v[cur][i]]) continue; pre[v[cur][i]] = cur; DFS(v[cur][i]); } } int main() { int ncase; int n, m; int x, y; scanf("%d", &ncase); while(ncase--) { memset(v, 0, sizeof(v)); memset(pre, 0, sizeof(pre)); scanf("%d%d", &n, &m); pre[m] = - 1; for(int i = 0; i < n - 1; ++i) { scanf("%d%d", &x, &y); v[x].push_back(y); v[y].push_back(x); } DFS(m); printf("%d",pre[1]); for(int i = 2; i <= n; ++i) printf(" %d", pre[i]); printf("\n"); } return 0; } /************************************************************** Problem: 1120 Language: C++ Result: Accepted Time:8 ms Memory:3052 kb ****************************************************************/
Problem H: 神密的数列
Description
2030年,酷夏。一队考古人员来到这片山区,原因据说是发现这里可能有极其珍贵的古迹。
遗迹的开发工作工作远比他们之前想象的复杂度得多,开发进度缓慢,眼看着时间就快来不急了。
为了加快进度,他们打算雇佣当地的居民来帮忙。
听闻消息过来应征的大部分是中壮年,唯独一位特殊,是位老人家,看起来已经年过半百,头发花白,带着眼镜,在人群中实在太显眼,大概是为了生计吧。
。。。
古迹的开发工作稳步进行,这块巨大的石碑在地底沉睡了几千年后终于又要重见光明了。
考古学家们站在石碑边上,轻轻擦去尘土,开始解读上面的信息。
A:“好像都是甲骨文,而且都是数字”
B:”确实都是数字。1, 2, 4, 7, 11, 16, 22 ,。。。。。“
C:"这一大串数字是什么意思"
A:”看不出规律,但是一定有重大的含义,你们看过20年前那部《神秘代码》的电影吗,我觉得很有可能跟那个一样,关乎我们地球存亡!“
大家都觉得A说很有道理,激动得不知道说什么话好
”额。。。那个。。。“突然从身后传来声音
纷纷回头望去,是那位老人家
”虽然我看不懂甲骨文,但是你刚才说的那串数字不就是二阶等差数列嘛,我当年在学校的比赛出过这道题“
一群人愣了一下
“好像是啊,相邻两个数的差分别为1, 2, 3, 4, 5, 。。。。”
然后脸上纷纷由兴奋变得充满窘色
看着老人家已经回头准备离开,大家纷纷叫住他
”等一下先别走,能告诉我们您的名字吗“
”算了吧,要什么名字,叫我BMan吧”然后大步离去,头也不回
Input
输入数据的第一行为一个正整数T
接下来有T行,每行有一个正整数n (n <= 1000)
Output
对于每一个n,请输出二阶等差数列中第n个数的值
Sample Input
1
2
5
8
Sample Output
2
11
29
签到题
#include <stdio.h> #include <iostream> #include <algorithm> #include <string.h> #include <math.h> using namespace std; #define N 1010 #define Max 1 << 29 int tt[N]; int t; int main() { int n; tt[1] = 1; int cnt = 1; for(int i = 2; i < 1010; i ++) { tt[i] = tt[i - 1] + cnt; cnt ++; } while(~scanf("%d",&t)) { while(t --) { scanf("%d",&n); printf("%d\n", tt[n]); } } }