ZZULI - 1705 && 1706 && 1707 && 1708 && 1709 && 1710 && 1711 && 1712

1705: 小明在工作

Time Limit: 1 Sec   Memory Limit: 128 MB
Submit: 83   Solved: 25

Submit Status Web Board

Description

小明的工作是负责记录饭堂中正在排队的人的信息 
在他的工作中会有三种可能的事件发生: 
    1.编号为id的学生加入到队伍的最后面 
    2.排在最前面的学生打完饭离开了队伍 
    3.老板过来询问当前排在队伍前方第k个的学生的编号 
由于每天的工作量太大(每天最多有100000个以上事件发生), 
小明苦不堪言,让你写个程序帮他

Input

输入的第一个数是正整数T,表明接下来有T组数据 
每组数据的第一个数为正整数n,表示有n件事会发生 
接下来有n行,每行分别表示上诉三种事件的其中一种,格式分别如下: 
1 id 

3 k 
注意当队伍中已经没人的时候请忽略第2种事件,每组数据新开始的时候队伍中人数都为0

Output

对于给个第3种的事件,请输出第k个学生的编号, 
如果队伍的人数小于k,输出“na li you zhe me duo ren”。

Sample Input

2
5
1 1
1 2
3 1
2
3 1
2
1 1
3 2

Sample Output

1
2
na li you zhe me duo ren

HINT

Source

2015广东工业大学ACM校赛-初赛





水水题,这次做的有点急,WA得有点多


AC代码:

#include <cstdio>
#include <cstring>
#include <string>
#include <iostream>
#include <algorithm>
#include <queue>
#include <map>
#define LL long long
using namespace std;
 
int main() {
    int T, n;
    scanf("%d", &T);
    while(T--) {
        char q[100005][20];
        int tou = 0, wei = 0;
        int op, b;
        scanf("%d", &n);
        while(n--) {
            scanf("%d", &op);
            if(op == 1) {
                scanf("%s", q[wei++]);
            }
            else if(op == 2) {
                if(tou != wei)tou++;
            }
            else if(op == 3) {
                scanf("%d", &b);
                if(b >= wei - tou + 1) printf("na li you zhe me duo ren\n");
                else printf("%s\n", q[tou + b - 1]);
            }
        }
    }
    return 0;
}



1706: 神奇的编码

Time Limit: 1 Sec   Memory Limit: 128 MB
Submit: 171   Solved: 38

Submit Status Web Board

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

3
1
10
27

Sample Output

A
J
AA

HINT

Source

2015广东工业大学ACM校赛-初赛




AC代码:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <cmath>
#define LL long long
using namespace std;
 
char ans[1000];
 
int main() {
    int T, n;
    scanf("%d", &T);
    while(T--) {
        int num = 0;
        scanf("%d", &n);
        while(n) {
            int t = (n - 1) % 26;
            ans[num++] = (char)(t + 'A');
            n = (n - 1) / 26;
        }
        for(int i = num - 1; i >= 0; i--) {
            printf("%c", ans[i]);
        }
        printf("\n");
    }
    return 0;
} 





1707: 丧心病狂的计数

Time Limit: 1 Sec   Memory Limit: 128 MB
Submit: 139   Solved: 57

Submit Status Web Board

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

1
3 2
1 2 3

Sample Output

5

HINT

Source

2015广东工业大学ACM校赛-初赛




AC代码:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define LL long long
using namespace std;
 
int a[100005];
 
int main() {
    int T, n, k;
    scanf("%d", &T);
    while(T--) {
        scanf("%d %d", &n, &k);
        for(int i = 0; i < n; i++) {
            scanf("%d", &a[i]);
        }
        sort(a, a + n);
         
        LL ans = 0;
        for(int i = n - 1; i > n - 1 - k; i--) {
            ans += a[i];
        }
        cout << ans << endl;
    }
    return 0;
}





1708: 01串也疯狂之光棍也有伴

Time Limit: 1 Sec   Memory Limit: 128 MB
Submit: 74   Solved: 13

Submit Status Web Board

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

3
1
4
5

Sample Output

0
8
19

HINT

Source

2015广东工业大学ACM校赛-初赛




AC代码:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define LL long long
#define MOD 1000000007
using namespace std;
 
const int maxn = 1000005;
LL a[maxn] = {0, 0, 1};
 
LL qmod(LL x, LL n) {
    LL ret = 1;
    while(n) {
        if(n & 1) ret = (ret * x) % MOD;
        x = (x * x) % MOD;
        n >>= 1;
    }
    return ret;
}
 
void init() {
    for(int i = 3; i < maxn; i++) {
        a[i] = (a[i - 1] + a[i - 2] + qmod(2, i - 2) ) % MOD;
    }
}
 
int main() {
    init();
    int T, n;
    while(scanf("%d", &T) != EOF){
        while(T--) {
            scanf("%d", &n);
            cout << a[n] << endl;
        }
    }
    return 0;
}




1709: Fire or Retreat

Time Limit: 1 Sec   Memory Limit: 128 MB
Submit: 90   Solved: 33

Submit Status Web Board

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

2
100 1000
17 300

Sample Output

Fire
Retreat

HINT

Source

2015广东工业大学ACM校赛-初赛





AC代码:

#include <cstdio>
#include <cstring>
#include <algorithm>
#define LL long long
using namespace std;
 
int main() {
    int T;
    double v, d;
    scanf("%d", &T);
    while(T--) {
        scanf("%lf %lf", &v, &d);
        if(v * v / 10 >= d) printf("Fire\n");
        else printf("Retreat\n");
    } 
    return 0;
}





1710: GG的匹配串

Time Limit: 1 Sec   Memory Limit: 128 MB
Submit: 16   Solved: 6

Submit Status Web Board

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

2
ATUUUUAC
2
ATACGTCT
6

Sample Output

1
3

HINT

Source

2015广东工业大学ACM校赛-初赛





AC代码:

#include <cstdio>
#include <cstring>
#include <algorithm>
#define LL long long
using namespace std;
 
char str[1005];
int vis[1005];
int num[27];
 
int main() {
    int T, K, N;
    scanf("%d", &T);
    while(T--) {
        scanf("%s", &str);
        scanf("%d", &K);
        int len = strlen(str);
        int t = len - K;
         
        int ans = 0;
        if(t == 0) ans = 0;
        else
        {
            memset(vis, 0, sizeof(vis));
            for(int i = 0; i < len; i++) {
                if(!vis[i]) {
                    memset(num, 0, sizeof(num));    
                    int cnt = 0;
                    for(int j = i; j < len; j += t) {
                        vis[j] = 1;
                        num[str[j] - 'A']++;
                        cnt ++;
                    }
                 
                    int ma = 0;
                    for(int k = 0; k < 26; k++) {
                        ma = max(ma, num[k]);
                    }
                 
                    ans += (cnt - ma);
                }
            }
        }
        printf("%d\n", ans);
    }
    return 0;
}





1711: 漂洋过海来看你

Time Limit: 1 Sec   Memory Limit: 128 MB
Submit: 30   Solved: 10

Submit Status Web Board

Description

BMan和hyx住在一个神奇的国度,这个国度有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来。 现在BMan在第S号城市,他经常想起那个一起AC过的队友hyx,记忆它总是慢慢的累积,在他心中无法抹去,可是他并不知道hyx 在哪个城市,所以他决定用尽半年的积蓄漂洋过海去找hyx,现在BMan很想知道如果他想去hyx所在的第X号城市,必须经过的前 一个城市是第几号城市(放心,由于心系队友,BMan是不会选择走重复的路的~)

Input

第一行输入一个整数T表示测试数据共有T(1<=T<=10)组 每组测试数据的第一行输入一个正整数N(1<=N<=1000)和一个正整数S(1<=S<=1000),N表示城市的总数,S是BMan所在城市的编号 随后的N-1行,每行有两个正整数a,b(1<=a,b<=N),表示第a号城市和第b号城市之间有一条路连通。

Output

每组测试数据输N个正整数,其中,第i个数表示从S走到i号城市,必须要经过的上一个城市的编号(其中i=S时,请输出-1)

Sample Input

1
10 1
1 9
1 8
8 10
10 3
8 6
1 2
10 4
9 5
3 7

Sample Output

-1 1 10 10 9 8 3 1 1 8

HINT

Source

2015广东工业大学ACM校赛-初赛



AC代码:

#include <cstdio>
#include <cstring>
#include <algorithm>
#define LL long long
using namespace std;
 
struct node {
    int u, v;
}edge[1005]; 
 
int vis[1005];
int ans[1005];
int T, N, S;
 
void dfs(int cur) {
    for(int i = 0; i < N - 1; i++) {
        if(!vis[i]) {
            if(cur == edge[i].u) {
                ans[edge[i].v] = cur;
                vis[i] = 1;
                dfs(edge[i].v);
            }
            else if(cur == edge[i].v) {
                ans[edge[i].u] = cur;
                vis[i] = 1;
                dfs(edge[i].u);
            }
        }
    }
}
 
int main() {
    scanf("%d", &T);
    while(T--) {
        scanf("%d %d", &N, &S);
        ans[S] = -1;
        for(int i = 0; i < N - 1; i ++) {
            scanf("%d %d", &edge[i].u, &edge[i].v);
        }
         
        memset(vis, 0, sizeof(vis));
        dfs(S);
        for(int i = 1; i < N; i++) {
            printf("%d ", ans[i]);
        }
        printf("%d\n", ans[N]);
    }
    return 0;
}





1712: 神密的数列

Time Limit: 1 Sec   Memory Limit: 128 MB
Submit: 66   Solved: 56

Submit Status Web Board

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

4
1
2
5
8

Sample Output

1
2
11
29

HINT

Source

2015广东工业大学ACM校赛-初赛





AC代码:

#include <cstdio>
#include <cstring>
#include <algorithm>
#define LL long long
using namespace std;
 
int main() {
    int T, n;
    scanf("%d", &T);
    while(T--) {
        scanf("%d", &n);
        printf("%d\n", n*(n - 1) / 2 + 1);
    }
    return 0;
}








你可能感兴趣的:(ACM,zzuli)