Gym - 100199C

时间:2019-08-24
本文章向大家介绍Gym - 100199C,主要包括Gym - 100199C使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

Gym - 100199C

题意:

其实这么长的英文题面就是想告诉我们这个题是丢手绢。

解法:

找到与N互质的最大整数K即可。当N为奇数时,(N-1)/2即为所求数;当N为偶数时,如果N/2 - 1是奇数,则为所求结果,如果为偶数,N/2 - 2为所求结果
不过要注意数据范围很大,需要写高精度。

CODE:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>

#define LL long long
#define N 2010

using namespace std; 

const int INF = 1e9; 
char s[N]; 
int a[N],T; 

int main() {
    scanf("%s", s); 
    int len = strlen(s); 
    int p = 0; 
    for (int i = 0; i < len; i++) {
        a[i] = (p % 2) * 5 + (s[i] - '0')/2; 
        p = s[i] - '0'; 
    }
    if ((s[len-1] - '0') & 1) {
        if (a[0]) printf("%d", a[0]); 
        for (int i = 1; i < len; i++)
            printf("%d", a[i]); 
        puts(""); 
    } else {
        if (a[len-1] & 1) {
            if (a[len-1] >= 2) a[len-1] -= 2; 
            else {
                int i;
                a[len - 1] += 8; 
                for (int i = len-2; i >= 0; i--) {
                    if (a[i] != 0) {
                        a[i] -= 1; 
                        break; 
                    }
                }
                for(int i = i + 1; i < len; i++)
                    a[i] = 9; 
            }
        }
        else {
            if (a[len-1] >= 1) a[len-1] -= 1; 
            else {
                int i; 
                a[len-1] += 9; 
                    for (i = len-2; i >= 0; i--) {
                    if (a[i] != 0) {
                        a[i] -= 1; 
                        break; 
                    }
                }
                for (i = i + 1; i < len; i++)
                   a[i] = 9; 
            }
        }
        int i; 
        for(i = 0 ; i < len && a[i] == 0 ; i++); 
        for(int j = i; j < len; j++) 
            printf("%d", a[j]); 
        puts(""); 
    }
    //system("pause");
    return 0;
}

原文地址:https://www.cnblogs.com/Repulser/p/11406291.html