LDUOJ——2022/10/18 2022级第一次ACM测试

发布于 2022-10-19  607 次阅读


前言

这次比赛试出来自己很多缺点,狠狠地被薄纱了,不过也不是坏事(笑):)

题目

1.Welcome to 610!

描述

——恭喜你打开了一道真 · 签到题!

Master J已经在610等学弟学妹们很久了,为了欢迎学弟学妹的到来,Master J决定写一个C语言程序用printf来输出“Welcome to 610!”(无引号 有换行符)可是最近Master J正在学可持久化动态凸包加可持久化动态树构造广义后缀自动机转广义后缀树得到后缀数组然后上可持久化动态仙人掌在虚树上做可持久化动态点分治维护最小费用无源汇有上下界可行流再套上任意模数分治快速数论变换对生成函数多项式求逆跑牛顿迭代忘记了输出语句怎么写了,现在请你告诉Master J输出语句对应的代码。

输入

输出

见题目描述

代码

#include<stdio.h>
int main()
{
    printf("printf(\"Welcome to 610!\\n\");");
    return 0;
}

解析

文字游戏,转义字符

2.Cutele and Chocolate

描述

UpMing喜欢奇数,所以在吃Chocolate的时候,他习惯一次只吃奇数个Chocolate;PushyTao喜欢偶数,所以在吃Chocolate的时候,他习惯一次只吃偶数个Chocolate(不包含0,否则他俩吃不到!)。这天Cutele买了n个Chocolate来到610,她知道了UpMing和PushyTao的习惯后,很是纳闷:why you so dog!但是Cutele聪明善良温柔大方,她想把Chocolate分给UpMing和PushyTao。

她想知道UpMing能否k次吃完这些Chocolate,PushyTao能否k次吃完这些Chocolate。

现在请聪明的你来帮Cutele解决这个问题吧!

输入

一行,输入两个正整数n,k保证在int范围内。

输出

如果UpMing能k次吃完这些chocolate的话,请输出“UpMing yyds”;

如果PushyTao能k次吃完这些chocolate的话,请输出“PushyTao yyds”;

如果UpMing和PushyTao都能吃完这些chocolate的话,请输出“Cutele is so happy!”;

如果UpMing和PushyTao都不能吃完这些chocolate的话,请输出“Cutele is so sad.”;

(你只需输出引号内的内容,只需要输出一句话)

输入:4 2

输出:Cutele is so happy!

代码

#include<stdio.h>
int main()
{
    int n,k,a=0,b=0;
    scanf("%d %d",&n,&k);
    if((n-(k-1))%2==1&&(n-(k-1)>0))
    {
        a++;
    }
    if((n-2*(k-1))%2==0&&(n-2*(k-1)>0))
    {
        b++;
    }
    if(a==1&&b==1)
    {
        printf("Cutele is so happy!");
    }
    else if(a!=1&&b==1)
    {
        printf("PushyTao yyds");
    }
    else if(a==1&&b!=1)
    {
        printf("UpMing yyds");
    }
    else if(a!=1&&b!=1)
    {
        printf("Cutele is so sad.");
    }
    return 0;
}

解析

先让俩人每人吃k次,奇数吃k-1个1,偶数吃k-1个2,最后看剩下的是奇数还是偶数

奇数组剩奇数,偶数组剩偶数,即可吃完

3.亨亨一眼题

描述

最近wsq喜欢上了拼图,于是他买了N×N的拼图,但是商家只给了他三种拼图块(每种拼图很多,可以认为无数块),每种拼图块由四个数组成一个2×2的矩阵,且每一个矩阵不能旋转,wsq十分注重细节,他想把拼图拼成沿着主对角线对称的样式,即沿主对角折叠可以完全重合 以下是三块拼图,拼成4*4的拼图的一种策略。但是wsq要去看如懿传,就把这个题扔给大哥亨亨了,亨亨一眼就看出了做法,并且AC了本题。

输入

共四行 第一行输入N,代表拼图大小

第二行 四个数,第一个拼图上的数字

第三行 四个数,第二块拼图上的数字

第四行 四个数,第三块拼图上的数字

(输入均在int范围内)

前两个数字代表第一行的两个数字,后两个数字代表第二行的两个数字

例如上述第三块拼图,将输入5 11 11 7;

输出

如果可以拼成主对角线对称 输出 “wsq txdy!”否则输出“%wsq!”(不含引号)

输入:

4
1 1 1 1
1 5 5 3
5 11 11 7

输出:wsq txdy!

代码

解析

4.water water water

描述

 UpMing 看到队友们都在努力学习新的知识点,他感受到了压力,于是他下定决心从现在开始,好好补题并学习新知识。所以现在需要小伙伴你来算算UpMing在n天内可以学到多少知识点。

从UpMing想学习的这天起为第一天,UpMing发现如果这天是3的倍数,他要是学习不仅学不会新的知识点,还会忘记一个之前学过的知识点,不学习的话就不会忘记,而其他时间学习都会学会与当天一样的知识点,即第一天会学会一个知识点,第二天学会两个知识点……

输入

一个整数n(1≤n≤1e91≤n≤1e9)

输出

一行,输出UpMing在n天内最多学会了多少知识点

输入:2

输出:3

代码

# include<stdio.h>
int main()
{
	long long n,s,j,a,b;
	scanf("%lld",&n);
	a=n/3;
	b=(1+n)*n/2;
	j=(3+3*a)*a/2;
	s=b-j;
	printf("%lld",s);
	return 0;
}

解析

经典坑人超时题,跑循环必死

单独求出来3的倍数有几天

然后利用等差数列求和再减去摸鱼不学习的天数

5.go go go

描述

“犹豫就会败北,莽撞才能AC"

Master J的队友又开始演起来了,在Master J打开题面之前已经提交了三遍了,已知每次提交错误将会罚时20分钟,如果这题已经正确了之后的提交将不再计入罚时,现在Master J想知道队友是不是把这题AC了

还有本题的罚时是多少?

输入

三个数  

均为 0 或者1,0代表本次答案错误,1代表答案正确!

输出

如果本题已经AC,输出”YES“和本题的罚时

如果没有AC,输出”NO“;

输入:1 1 1

输出:YES 0

代码

#include<stdio.h>
int main()
{
    int a,b,c,d;
    scanf("%d %d %d",&a,&b,&c);
    d = a + b + c;
    if(d>0)
    {
        if(a==1)
        {
            printf("YES 0");
        }
        else if(b==1)
        {
            printf("YES 20");
        }
        else if(c==1)
        {
            printf("YES 40");
        }
    }
    else if(d==0)
    {
        printf("NO");
    }
    return 0;
}

解析

注意已经AC之后再错就不会再加罚时了

分类讨论即可

6.Cutele's Easy Problem!!!

描述

这是一个签到题!!!

很久很久以前,巨龙突然出现,带走了灾难带走了公主又消失不见。王国十分危险,世间谁最勇敢,一位勇者赶来,大声喊:“我要带上最好的剑,翻过最高的山,闯进最深的森林,把公主带回面前”。国王非常高兴,忙问他的姓名,年轻人想了想,他说:“陛下我叫hhhhhhhhhaqhwthyhhhyuihhhhhhhhhhhhhhhhhhhhhhhhhhh”;勇者骑上最快的马,带着大家的希望从城堡里出发,最终勇者战胜了恶龙,救回了公主,回到了城堡。国王想授予勇者刻有名字的荣誉勋章,可是勇者的名字太长了,国王感到很苦恼。于是聪明漂亮善良可人的公主提出可以只在勋章上刻勇者名字里出现次数最多的字母。可是王国的工匠KingZhang是个很傻很傻的人,他只会在勋章上刻数字,所以聪明漂亮善良可人的公主又提出可以只刻字母的ASCII值。公主真可爱!

输入

输出

如题

代码

#include<stdio.h>
int main()
{
    printf("104");
    return 0;
}

解析

对照ASCII表写数...

题干neta自达拉崩吧

7.The Legendary master CoolGuang! 

描述

    自光光学长大三以来,备受领导与各个上层宠爱,被册封为610的Legendary master,他决定狗拿耗子多管闲事放一道坏题,然而这却遭到了亨亨学长(18最好的学长) 的强烈反对。所以他们共同为你们出了一个有意思的题目。光光有两个ACM书库,里面有很多关于数据结构和图论的书籍,一堆为有N本,一堆有M本,亨亨给定了两种方式:

       一次可以从一个书柜中拿出任意数量的书籍,

       一次操作可以从两个书柜中取出相同数量的书籍。

      最后取完者胜利,亨亨让光光先拿,但光光写了一个程序帮助他操作(即做出最优的选择),然而亨亨不需要想就可以做出最优的选择。

如果光光胜利则输出 CoolGuang,亨亨胜利输出 hengheng

输入

一行两个整数,N,M,代表第一堆有n本书,第二堆有m本书。

1≤N≤1e6

1≤M≤1e6

输出

如果光光胜利则输出 CoolGuang,亨亨胜利输出 hengheng

输入:2 1

输出:hengheng

代码

#include<stdio.h>
#include<math.h>
int max(int a,int b)
{
    if(a>=b)
        return a;
    else
        return b;
}
int min(int a,int b)
{
    if(a<=b)
        return a;
    else
        return b;
}
int main()
{
    int a,b,x,m,n;
    double s,y;
    scanf("%d %d",&a,&b);
    m = min(a,b);
    n = max(a,b);
    s = (sqrt(5.0)+1)/2;
    y = (double)(b-a);
    x = (int)(y*s);
    if(x==a)
    printf("hengheng");
    else
    printf("CoolGuang");
    return 0;
}

解析

威佐夫博弈题,难顶

至今也不是很明白

注意奇异局势

8.Cutele loves circle

描述

Cutele非常喜欢弹珠,她已经收集了很多弹珠了。

有一天Cutele在和KingZhang玩弹珠,她突然想到一个很好看的数字,她把这叫做“Circle Number”。她和KingZhang说了定义:如果一个正整数除了最左边以外的所有数字都为0,那么它就是Circle Number。

例如,以下数字就是Circle Number:4000,1,800;以下数字不是Circle Number:562,2005,250;

想不到,KingZhang直接用这个定义出了一道数论题为难Cutele:给定一个正整数n,求一些Circle Number,使得他们的和等于n并且Circle Number的个数最少。

如果Cutele做不出这道题,她心爱的弹珠就会被KingZhang抢走,但是Cutele不会数论,聪明可爱的你能够帮助Cutele解决这个问题吗?

如果你解决了的话,Cutele就会给你糖果。

输入

多组数据输入

每一行给出一个整数n

输出

从小到大输出你找到的Circle Number,用空格分割。

输入:9875

输出:5 70 800 9000

代码

#include<stdio.h>
int pow2(int a,int b)
{
    int x=1;
    while(b)
    {
        x *= a;
        b--;
    }
    return x;
}

int main()
{
    int a,b,c,d;
    while(scanf("%d",&a)!=EOF)
    {
        for(d=0;a!=0;d++)
        {
            b = a % 10;
            c = a / 10;
            b = b * pow2(10,d);
            if(b!=0)
            {
                printf("%d ",b);
            }
            a = c;
        }
        printf("\n");
    }
    return 0;
}

解析

另类的倒置位数题

谨防自带的pow函数出现误差

9.Cutele's stone game

描述

周二下午,实验室的小伙伴们都出去玩了,UpMing和CoolGuang在打篮球,PushyTao和Fox在跑步,KingZhang在玩现实版糖豆人。

KingZhang在地上画了一行Circle,每个Circle里面都有一个数字,第i个Circle里面的数字是i;KingZhang正在跳Circle,他打算跳k个Circle后就结束游戏去写题。

可是这时Cutele过来了,她最近被数论搞的心烦,如果这个Circle里的值能够整除n,就在这个Circle里放一个气球。如果KingZhang踩到气球,胆小的Cutele就会被吓哭。

KingZhang不想看到Cutele哭,可是他也不知道怎么办了。

请你告诉KingZhang如果在不惹哭Cutele的情况下结束游戏吧!

输入

一行,两个正整数n,k

输出

一行,输出KingZhang游戏结束时所在的Circle的最小值

输入:2 4

输出:7

代码

#include<stdio.h>
int main()
{
    long long n,k,a=0;
    scanf("%lld %lld",&n,&k);
    if(k%(n-1)==0)
    {
        a=n*k/(n-1)-1;
    }
    else
    {
        a=k/(n-1)*n+k%(n-1);
    }
    printf("%lld",a);
    return 0;
}

解析

又是不让硬跑循环的题(悲)

思路是把数轴分为长度为n的一段一段,那么每一段里面肯定有n-1个数字不能整除n,我们只要查一下第k个数字在哪一段即可

10.真·签到题

描述

UpMing 在看了其他学长学姐出的题后觉得他们的签到题太少,所以UpMing给大家精心准备了一道签到题

你需要输入一个五位数,然后将其每一位逆序输出,例如,你输入12345,你需要输出54321;(输入00001是被允许的,你需要输出10000) UpMing连坑点都告诉你了,所以开始你的签到吧!

输入

 一个五位数

输出

五位数

输入:12345

输出:54321

代码

#include<stdio.h>
int main()
{
    int a,b,c,d,e,f,a2;
    scanf("%d",&a);
    b = a % 10; //个位
    c = a % 100 / 10; //十位
    d = a % 1000 / 100; //百位
    e = a % 10000 / 1000; //千位
    f = a / 10000; //万位
    a2 = b*10000+c*1000+d*100+e*10+f;
    printf("%05d",a2);
    return 0;
}

解析

经典倒置,没啥好说的

记得补0

11.一看Master J就是个女汉子

描述

实验室的人都知道Master J是个女汉子,所以你要计算Master J是不是实验室最强的选手。

给你11个数字,每个数字代表一个人的战力,第一个数字是Master J的战力,如果Master J的战力最强,那么输出“or2”否则输出Master J是第几强的。因为Master J实在是太强了所以如果和其他人相同分数会自愿在较低的排名。

输入

11个数字,每个数字都在long long 范围内;

输出

请看题面第二段

输入:20 7 1 0 9 4 18 18 2 4 5

输出:or2

代码

#include<stdio.h>
int main()
{
    int n=1;
    long long a,b,c,d,e,f,g,h,i,j,k;
    scanf("%lld %lld %lld %lld %lld %lld %lld %lld %lld %lld %lld",&a,&b,&c,&d,&e,&f,&g,&h,&i,&j,&k);
    if(a>b && a>c && a>d && a>e && a>f && a>g && a>h && a>i && a>j && a>k)
    {
        printf("or2");
    }
    else
    {
        if(a<=b)
        n++;
        if(a<=c)
        n++;
        if(a<=d)
        n++;
        if(a<=e)
        n++;
        if(a<=f)
        n++;
        if(a<=g)
        n++;
        if(a<=h)
        n++;
        if(a<=i)
        n++;
        if(a<=j)
        n++;
        if(a<=k)
        n++;
        printf("%d",n);
    }
    return 0;
}

解析

用了个笨法子,多步选择

12.旺子哥抢生意

描述

旺子哥看王老板卖电影票很赚钱,所以也想去卖电影票,王老板害怕旺子哥抢自己生意,为了赢得顾客的支持,推出了一系列活动.

某个活动:

为了回馈新老客户,王老板决定发个朋友圈,每当有人点赞,王老板的朋友圈就会多一个赞,每排只能有8个赞,王老板决定从选出最左边和最右边的人。给出总价值至少为98.88的红包,要求每人红包大小相同,由于经费有限,需要让发放的红包大小尽可能小。为了吉利,如果每个人得到的红包小数点后两位不等于0.88那么需要使其等于0.88。 例如 2.87 元应发 2.88 元的红包,2.89元应发 3.88 元的红包。

王老板问你中奖的每个人应该发多少钱的红包。

输入

一个正整数 n,代表点赞数。(1≤n≤100)

输出

输出红包的面值,保留二位小数。

输入:8

输出:49.88

代码

#include<stdio.h>
int main()
{
	int n,c;
    scanf("%d",&n);
	if(n % 8 == 0)
    {
		c = n / 8 * 2;
	}
    else
    {
		c = n / 8 * 2 + 1;
	}
	double k = 98.88 / (c * 1.0);
	double m = 0.0;
	int s = k * 100;
	int t = s % 100;
	int k2 = s / 100;
	if(t <= 88)
    {
    m = k2 * 100 + 88;
    }
	else
    {
    m = (k2 + 1) * 100 + 88;
    }
	m = m / 100.0;
	printf("%.2lf",m);
	return 0;
}

解析

注意,不满八个人的一排

老板只给一个人发钱

太坏了