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); return0; }
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+
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