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]);
}
}
}