1. 程式人生 > >Codeforces 805A/B/C

Codeforces 805A/B/C

bsp 正整數 void 問題 最短 最短路 char tar logs

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;
}

Codeforces 805A/B/C