鲁迅曾说,做完题目要记得记录。更何况这是第一次参赛呢orz。因此,写下这篇题解。
题目原地址:http://acm.csust.edu.cn/contest/113

A

题目

zw吃外卖

描述

zw是集训队19级里的神之一。他有个习惯就是点外卖吃,他说这并不是因为懒得去食堂,是因为这样能省下时间来刷题,或许这就是神吧。但神也有神的烦恼,他的外卖总是被人拿走,如果找不回来的话就只能吃难吃的面包了。

万幸的是热心的qc帮他找到了他的外卖,zw非常开心。顺手把眼前的题目秒了。他有点累了,需要休息一会。但眼前又有了新的问题,qc十分崇拜作为神的zw,想让zw帮qc算算他什么时候能脱单。zw告诉了你计算的方法,如果qc现在离寝室距离为奇数他就能脱单,否则不能,你能算出qc到底能不能脱单吗

输入

输入一个整数a代表距离(1≤a≤1000,000,000)

输出

输出YES或NO(注意大小写)

题解

首先输入输出都是参赛必备技能了吧,判断奇偶用取余即可。主要就是废话太多了= =

代码

#include<bits/stdc++.h>
using namespace std;
int main() {
    int n;
    cin >> n;
    if (n % 2 == 1) {
        cout << "YES";
    }
    else {
        cout << "NO";
    }
    return 0;
}

B

题目

lcj的烦恼

“战魂不灭,义薄云天”作为荣耀四周年玩家的lcj,一直没上过王者,但还是对王者不离不弃,于是呼他练了一年人机QAQ众所周知,lcj是高端关羽玩家(排位低于30%胜率),关羽武圣皮肤上线,lcj很是喜欢,但lcj又想尽可能的减少小金库的支出,请各位聚聚帮忙解决lcj的烦恼

已知新皮肤只需要x点卷便可以带回家。(1点卷只需1元)

已知微信充值点卷为98折,现lcj的小金库还有若干,求出lcj花费多少人民币能把关羽武圣皮肤带回家(保留两位小数)

输入

一行输出点卷数量x (x是整数且1<=x<=10000)(x是整数且1<=x<=10000)

输出

输出一行表示答案

题解

同样废话太多了= =其实就是乘以0.98,而且都没有精度要求,会浮点数就行。

代码

#include<bits/stdc++.h>
using namespace std;
int main() {
    int x;
    float ans;
    cin >> x;
    ans = x * 0.98;
    cout << ans;
    return 0;
}

C

题目

a+b

描述

众所周知,每个颜色都可以由红(R)绿(G)蓝(B)三色叠加,即每个颜色都可以用不同的RGB颜色值表示,一个RGB颜色值包含R、G、B三个值。一个24位色的RGB值范围从0-255,将这三个值分别用两位十六进制数表示,加上’#’前缀形成HEX颜色码。如白色的RGB颜色值为(0, 0, 0),HEX颜色码为#000000,黑色的RGB颜色值为(255, 255, 255),HEX颜色码为#ffffff。

若某两个24位色的R值、B值、G值分别相加都为255,则这两个24位色互为补色,如黑色和白色。

现给出两个颜色的RGB颜色值,判断这两个颜色是否互为补色,如果是,输出”yes”,否则,输出”no”。

输入

第一行三个10进制数,分别表示第一个颜色的R值、G值、B值

第二行三个10进制数,分别表示第二个颜色的R值、G值、B值

输出

一行,如果两个颜色互为补色,输出”yes”,否则输出”no”。(不含引号,注意大小写)

题解

依然是废话太多了(这次出题人咋废话这么多),总而言之就是条件判断+二元运算符的运用。

代码

#include<bits/stdc++.h>
using namespace std;
int main() {
    int r1, g1, b1, r2, b2, g2;
    cin >> r1 >> g1 >> b1 >> r2 >> g2 >> b2;
    if ((r1 + r2 == 255) && (g1 + g2 == 255) && (b1 + b2) == 255) {
        cout << "yes";
    }
    else {
        cout << "no";
    }
    return 0;
}

D

题目

zw抢苹果

描述

由于zw有女朋友就天天欺负没女朋友的队员,比如经常发这种

这一天,训练完的dj,无意中闯入了一处神奇的地方,这里有n组苹果。dj由于背包只能拿一组苹果,所以他选择第k组苹果,但是这时zw来了,他施展神力抢走剩余苹果的第1组(zwyyds),再抢走剩余苹果的第2组,再抢走剩余苹果的第3组,以此类推,直到他所要抢的那组的编号在剩余组里不存在时停止抢苹果(没看懂可以看样例解释)。

输入

第一行为两个整数n,k(0<nk≤100)。

第二行为n个整数分别表示每组苹果的个数(0<苹果个数≤100)

输出

如果剩余苹果的组数小于k,那么dj将会很伤心则输出"-1",否则输出剩余苹果的第k组的苹果个数。

提示

样列1解释

第一次抢苹果前苹果的分组为

2 5 3 1 2

抢走第1组,此时剩余苹果的分组为

5 3 1 2

抢走第2组,此时剩余苹果的分组为

5 1 2

抢走第3组,此时剩余苹果的分组为

5 1

在抢第四组时发现只剩两组了,停止行动。所以第k=2组答案为1。

题解

这题开始要动点脑子了,不过没有坑人,非常直白。

思考,第一次抢,相当于删除第一个元素,然后下一次抢的组号加1。一删一加,是不是相当于每次抢的组号都加了2?也就是说,抢的组号是1,3,5,7,9...那么剩下的,也就是2,4,6,8,10...我们只需要记录剩余苹果的组数,也就是说得到有几个偶数小于等于n就可以了。

代码

#include<bits/stdc++.h>
using namespace std;
int main() {
    int n, k;
    cin >> n >> k;
    int a[110];
    for (int i = 0; i < n; i++) {
        cin >> a[i];
    }
    int sum = 0;
    for (int i = 2; i <= n; i += 2) {
        sum++;
    }
    if (sum < k) {
        cout << -1;
    }
    else {
        cout << a[2 * k-1];
    }
    return 0;
}

E

题目

一直单身一直爽

描述

这天又没下雨,qc作为"雨神"感到很不开心,因为他要去上体育课了,但他太懒不想去,因此作为神的他,施展了一波神力:他的单身时间会增加x年,然后换来一场雨。

现在给出n节体育课,和一个长度为n的数组a,对于第i节体育课,如果a[i]=0,表示qc会去上体育课,若a[i]=1,则表示qc会施展神力,不去上体育课,若qc连续施展了k次神力,则他的单身时间会是无穷大,问上完n节体育课后,他的单身时间会是多少?假设他一开始的单身时间为0

输入

第一行三个整数n,x,k(1≤n,x≤100)(1≤kn)分别表示体育课的节数,施展一次神力增加的单身时间,连续施展k次

第二行有n个整数,表示数组a(0≤a[i]≤1)

输出

输出一个整数,表示qc的单身时间,若为无穷大,则输出inf

题解

相当于一个计数器,遇到1则自增,将增加的单身时间加进存储器,遇到0则将计数器归零。计数器一到k就输出inf结束。

代码

#include<bits/stdc++.h>
using namespace std;
int main() {
    int n, x, k;
    cin >> n >> x >> k;
    int a[100];
    for (int i = 0; i < n; i++) {
        cin >> a[i];
    }
    int sum=0,ans=0;
    for (int i = 0; i < n; i++) {
        if (a[i] == 1) {
            sum++;
            ans += x;
        }
        else {
            sum = 0;
        }
        if (sum == k) {
            cout << "inf";
            return 0;
        }
    }
    cout << ans;
    return 0;
}

F

题目

神奇的青青草原

描述

故事发生在青青草原。懒羊羊作为最懒的羊,独自睡在羊村外。

这时候包括灰太狼在内的n只狼都看到了他。但懒羊羊有羊神的眷顾,吃了懒羊羊的狼自己也会成为新的懒羊羊(吃了新的懒羊羊的狼也会变成懒羊羊,以此类推),变成懒羊羊后,就有可能被其他狼吃掉。

已知,这些包括灰太狼在内的n只狼都想在不被其他狼吃掉的情况下吃羊(性命优先)。并且他们各个都是聪明绝世的狼(包括灰太狼),能想出对应的决策

注意:所有懒羊羊都懒得跑。狼不能吃狼。

请问:灰太狼会不会去抢最开始的懒羊羊?

输入

一个整数n,代表狼的数量(包括灰太狼)(1<=n<=1,000,000)

输出

若要抢,输出”nice”

否则,输出”555”

题解

大佬们说,这是一道博弈题。咱没啥文化,不懂那么多,只不过模拟了一下就能感受到狼的心情,从而解答出题目。(虽然一开始脑残wa了两发)下面说下如何模拟。

n=1时,没有狼会吃掉灰太狼,此时果断上。

n=2时,灰太狼如果吃了就会被另一头狼吃掉,因此不吃。

n=3时,灰太狼如果吃了,那就还剩两头狼。开始了,看下n=2的情况,其中任何一头吃了灰太羊就会被另一头狼吃掉,因此他们都不会吃灰太羊,灰太羊是安全的。

n=4

n=5

n=6...

可以发现,如果除去灰太狼剩下的狼是偶数,它们都不会去吃灰太羊。考虑一下n-1的情况,依然成立。

代码

#include<bits/stdc++.h>
using namespace std;
int main() {
    int n;
    cin >> n;
    if ((n - 1) % 2 == 0) {
        cout << "nice";
    }
    else {
        cout << "555";
    }
    return 0;
}

G(连wa6发,数学老师,对不起)

题目

dl的会长

描述

众所周知,会长是协会权力最大的dl了,为了新生能有更好的参赛体验(其实是为了毒瘤新生),他决定利用他的权力对其他出题人的题目难度进行修改,但其他出题人cbb(最毒瘤)当然会不服气,所以会长决定用金钱收买他们,会长可以花1元使任何一道题目的难度增加1或者减少1 (每道题可以操作任意次),现在他想使得所有题目难度一致,问他最少要花费多少钱。

输入

四个整数a ,b,c,d ,分别代表现有的四个题目的难度(1000,000,0000≤a,b,c,d≤1000,000,000)。

输出

会长使这四个题难度一致的最小花费。

题解

我做这题时的思路,是想找出所有题目难度一致到的那个数t,剩下的问题就能迎刃而解。所以问题就变成了如何寻找t?一般人都会认为t是平均数,这样你就会和我一样wa到自闭最后准备去写搜索啦!!!

其实,可以把题目转化为求数轴上四点到一点距离和的最小值。因此,t就是四个点的中位数。(学统计的时候我翘了,数学老师cd,对不起)

题目

#include<bits/stdc++.h>
using namespace std;
int main() {
    long long a[4];
    cin >> a[0] >> a[1] >> a[2] >> a[3];
    sort(a, a + 4);
    long long minmum = a[0];
    long long maxmum = a[3];
    long long t1=a[1],t2=a[2];
    long long sum1 = abs(t1 - a[0]) + abs(t1 - a[1]) + abs(t1 - a[2]) + abs(t1 - a[3]);
    long long sum2 = abs(t2 - a[0]) + abs(t2 - a[1]) + abs(t2 - a[2]) + abs(t2 - a[3]);
    cout << min(sum1,sum2);
    return 0;
}

总结

第一次参加比赛,怎么说呢,就是很不稳,会很着急,明明wa损失比多考虑20分钟还多。最后一题wa6连导致rk3太屈辱了QAQ题目本身不难,没有冰阔落也没有幸福车裂,重要的还是要积累经验,沉着冷静。附上排行榜。


夢に僕らで帆を張って 来るべき日のために夜を越え。