Codeforces 805A/B/C
Posted SiuGinHung
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces 805A/B/C相关的知识,希望对你有一定的参考价值。
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-1→k+1→k;
b.若n=2k-1(k=1,2,...),则遍历顺序:1→n→2→n-1→...→k-2→k+1→k-1→k。
以上情形的最小代价均为k-1。参考程序如下:
#include <stdio.h> int main(void) { int n; scanf("%d", &n); printf("%d\n", (n - 1) / 2); return 0; }
以上是关于Codeforces 805A/B/C的主要内容,如果未能解决你的问题,请参考以下文章
codeforces805F Expected diameter of a tree
CodeForces - 805D Minimum number of steps
Codeforces 805 D Minimum number of steps
Codeforces Round #746 (Div. 2)(A,B,C)