Codeforces 805A/B/C

本文提供 CodeForces 805 比赛中 A、B、C 三道题目的解题思路及代码实现。A题为求区间内最高频因数,B题构造不含长度为3的回文串,C题寻找遍历所有点的最小代价。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

A. Fake NP

传送门:http://codeforces.com/contest/805/problem/A

本题是一个数学问题。

给定两个正整数l,r(l≤r),对于区间[l..r]上的任一整数,写出其除1以外的所有因数,求区间[l..r]上出现频率最高的一个因数。

结论:若l=r,则答案为l(或r),否则为2。参考程序如下:

#include <stdio.h>

int main(void)
{
    int l, r;
    scanf("%d%d", &l, &r);
    printf("%d\n", l == r? l: 2);
    return 0;
}

B. 3-palindrome

传送门:http://codeforces.com/contest/805/problem/B

本题是一个构造问题。

一个长度为n的字符串,每一个字符是‘a’、‘b’、‘c’三个字符中的一个。这个字符串不存在长度为3的回文,且字符‘c’出现的频率尽可能低。生成一个满足上述条件的字符串。

这个字符串可以是以下的形式:

aabbaabbaabb...

参考程序如下:

#include <stdio.h>

int main(void)
{
    int n;
    scanf("%d", &n);
    for (int i = 0; i < n; i++)
        putchar(i & 2? 'b': 'a');
    return 0;
}

C. Find Amir

传送门:http://codeforces.com/contest/805/problem/C

本题是一个数学问题。

n个点,从点i到点j的代价是(i+j)mod(n+1)。求遍历这n个点的最小代价。

这个问题看似是一个最短路(Shortest Path)问题。但实际上,这个问题也可以被看作是一个数学问题。

i+j=n+1,则从点i到点j的代价为0。如以下的{i,j}组合:

{1,n},{2,n-1},...,{i+1,n-i},...。

因此,可以设置遍历顺序:1→n→2→n-1...→i→n+1-i→i+1→n-i→...。

a.若n=2k(k=1,2,...),则遍历顺序:1→n→2→n-1...k-1k+1k

b.若n=2k-1(k=1,2,...),则遍历顺序:1→n→2→n-1...k-2k+1k-1k

以上情形的最小代价均为k-1。参考程序如下

#include <stdio.h>

int main(void)
{
    int n;
    scanf("%d", &n);
    printf("%d\n", (n - 1) / 2);
    return 0;
}

 

转载于:https://www.cnblogs.com/siuginhung/p/7719745.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值