2022.10.1 NYIST 国庆欢乐进行曲题解

目录

A.唱!练习时长两年半的acmer练习生歌颂国庆!!!

B. 跳!鸡哥想要去鸡场!!!

C.rap

D.篮球!妈妈我要学篮球!

E.速速与董学姐击剑 

 F.关于比赛提前半小时封榜这件事

G. 1024 = 1000000000

I.潮男mbd

J.小黑子被感化

K.伪签到

 L.区区签到题,也敢拦道友AK?

写在最后


 

A.唱!练习时长两年半的acmer练习生歌颂国庆!!!

没什么好说的,直接输出(这里再次提醒大家输出问题直接复制!!!)

AC代码如下:

#include<stdio.h>

int main()
{
   printf("国庆快乐!!!");
   return 0;
}

B. 跳!鸡哥想要去鸡场!!!

其实题目非常简单就是看鸡场范围内有没有鸡哥每次所跳步数的倍数

AC代码:

#include <stdio.h>

int main() {
	int k, a, b, flag = 0;
	scanf("%d%d%d", &k, &a, &b);
	for (int i = a; i <= b; i++) {
		if (i % k == 0) {
			flag = 1;
		}
	}
	if (flag)printf("OK\n");
	else printf("NG\n");
	return 0;
}

C.rap

就让你求最长连续字母,那么就是求空格以外哪个字符串最长。

直接转化为多组输入找最长,直接输出就可以了

C代码:

#include <stdio.h>
#include <string.h>

char a[105], b[105];

int main() 
{
	int lena = 0;
	while (~scanf("%s", b)) 
	{
		int lenb = strlen(b);
		if (lenb > lena) {
            lena = lenb;
			strcpy(a, b);
		}
	}
	printf("%s\n", a);
	return 0;
}

 C++的话更简单,不用strcpy就能直接赋值。

#include <iostream> 
using namespace std;

int main() 
{
	string a;
	string b;
	while (cin >> b) 
	{
		if (b.size() > a.size()) 
		{
			a = b;
		}
	}
	cout << a << endl;
	return 0;
}

D.篮球!妈妈我要学篮球!

没啥好说的,B组出过一样的题

#include<stdio.h>

int main() 
{
	int n;
	scanf("%d", &n);
	for (int i = 0; i < n; i++) 
	{
		printf("我爱篮球!\n");
	}
	return 0;
}

E.速速与董学姐击剑 

本题也是防ak题但也是真不难,直接模拟打表也能做

#include<stdio.h>

int main() 
{
	int t;
	scanf("%d", &t);
	while (t--) 
	{
		int n;
		scanf("%d", &n);
		int a = 1, b = 1, cnt = 0, sum = 0;
		while (sum < n) 
		{
			sum += b;
			if (sum >= n)
				break;
			if (a % 2 == 0) 
			{
				a++;
				b++;
				cnt++;
			} 
			else 
			{
				a++;
				cnt++;
			}
		}
		printf("%d\n", cnt);
	}
	return 0;
}

关于这道题我是打表模拟出来的所以大家可能看起来不那么懂所以大家可以来欣赏一下姜God对于这道题严谨的证明,优雅的代码!!!感叹一句,姜神永远滴神!!!


F.关于比赛提前半小时封榜这件事

这题很水,水到你直接根据日历手算日期31*5+28+30*3+1输出就行,最后结果如下:

#include<stdio.h>

int main() 
{
	printf("365 274 2033-10-01\n");
	return 0;
}

G. 1024 = 1000000000

很经典的十进制转二进制问题,需要注意特判一下0的清况。

AC代码如下:

#include <stdio.h>

int a[10];

int main() 
{
	int n ;
	scanf("%d", &n);
	int t = 0;
	while (n) 
	{
		a[t] = n % 2;
		t++;
		n /= 2;
	}

	if (t == 0) 
	{
		printf("0\n");
		return  0;
	}

	for (int i = t - 1; i >= 0; i--) 
	{
		printf("%d", a[i]);
	}

	printf("\n");
	return 0;
}

I.潮男mbd

其实就是个数学题,不一样的配对找最小的,剩下的自己配对除于二就可以了

AC代码如下:

#include<stdio.h>

int main() 
{
	int a, b;
	scanf("%d%d", &a, &b);
	
	if (a > b) 
	{
		printf("%d %d\n", b, (a - b) / 2);
	} 
	else 
	{
		printf("%d %d\n", a, (b - a) / 2);
	}
	
	return 0;
}

J.小黑子被感化

本题其实就是一个简单的递推,大家以中学的知识就能完全解决,唯一需要注意的是本题的数据范围在long long内,所以肯定会爆int的.

AC代码如下:

#include <stdio.h>

int main() 
{
	int x, n;
	scanf("%d%d", &x, &n);
	long long ans = 1;
	for (int i = 1; i <= n; i++) 
	{
		ans = ans + ans * x;
	}
	printf("%lld\n", ans);
	return 0;
}

K.伪签到

 签到一天会有一个OJ币,签到五天会给6个OJ币,那么就逢5的倍数就加上6,其余签到就加上1。再把每天做的题得到的OJ币加上就可以了。

#include<stdio.h>

int main()
{
    int n;
	while(scanf("%d",&n)!=EOF)
	{
        int sum = 0;
		for(int i=1;i<=n;i++)
		{
            int x;
            scanf("%d",&x);
            sum+=x;
			if(i%5==0)
				sum+=6;
			else
				sum+=1;
		}
		printf("%d\n",sum);
	}
}

 L.区区签到题,也敢拦道友AK?

本题是一个究极防AK的难度,题意,给了 n个货品(n 是偶数 ),每个货品有价值 ai, 将货品两两配对, 两两配对和总价值为 wi, 给定 k, 求 Σ⌊wi/k⌋ 最大值.

解题思路如下:

首先,既然是两个货品的重量ai之和wi除于k得到的是我们的利益,那么单个货物重量ai除于k即ai/k就是我们一定能获得的那一部分。那么我们就可以先把所有的货品能得到的利益给记录下来。那么怎样才能使两两组合增加更多的利益呢?贪心地来想,那就应该让这两个货物对k的余数之和大于等于k。由此我们就可以在计算单个货物利益时,把他们变成ai%k。再从小到大排个序,用双指针算法从头尾向中间推进,如果当前的最小值+最大值的和不能大于等于k,那就去找一个稍大一点的最小值,当他俩之和大于等于k后,我们头指针和尾指针都向中间走一步,同时记录下利益加一。

由于当前所有货物重量都是k的余数了,所以两个货物最大能获得的利益只能是1,达不到2的,所以此解成立,并且是可以得到最大利益的。

#include <iostream>
#include <algorithm> 
using namespace std;
const int N = 2*1e5+9;
int a[N];

int main()
{
    int t;

    scanf("%d",&t);
    while (t--)
    {
       	long long res = 0;
        int n,m;
        scanf("%d%d",&n,&m);
        for (int i = 0; i < n; i++)
        {
            scanf("%d",&a[i]);
            res += a[i] / m;
            a[i] %= m;
        }
        sort(a,a+n);
        int l = 0, r = n - 1;
        while (l < r)
        {
            if (a[l] + a[r] < m)
            {
                l++;
            }
            else
            {
                res++;
                l++;
                r--;
            }
        }
        printf("%lld\n",res);
    }
    return 0;
}

写在最后

国庆赛主要就是欢乐,签到题比较多也是尽可能想让大家多A几道,国庆过后节奏就会比较快了,差不多过一个星期多就会开始举行招新赛了,所以大家不能松懈了,打得好的同学不要骄傲,重要的是稳住心态,对知识查漏补缺,打的不好的同学也不要气馁,还有机会,进度已经压得很慢了把前面能补得尽量补上也不会太差,大家都把前面的题该补的补了。而且招新赛结束我们招新也不会结束,招新持续到明年寒假结束后还有招新淘汰赛,所以不要自暴自弃,都有机会!请大家继续加油!

 

 

 

  • 11
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值