zoukankan      html  css  js  c++  java
  • 数学+高精度 ZOJ 2313 Chinese Girls' Amusement

    题目传送门

     1 /*
     2     杭电一题(ACM_steps 2.2.4)的升级版,使用到高精度;
     3     这次不是简单的猜出来的了,求的是GCD (n, k) == 1 最大的k(1, n/2);
     4         1. 若n是奇数,则k = (n-1) / 2;
     5         2. 若n是偶数,讨论(n-1)/2 的奇偶性,若不是奇数,则是n/2-2;
     6     详细解释(证明):http://www.xuebuyuan.com/1552889.html
     7 */
     8 #include <cstdio>
     9 #include <iostream>
    10 #include <algorithm>
    11 #include <cstring>
    12 #include <string>
    13 #include <cmath>
    14 using namespace std;
    15 
    16 const int MAXN = 2e3 + 10;
    17 const int INF = 0x3f3f3f3f;
    18 string s;
    19 string ans;
    20 
    21 void div_2(void)
    22 {
    23     int len = s.length ();
    24     int tmp = s[0] - '0';
    25     if (tmp > 1)    ans += char (tmp/2 + '0');
    26     tmp &= 1;
    27     for (int i=1; i<len; ++i)
    28     {
    29         tmp = tmp * 10 + (s[i] - '0');
    30         ans += char (tmp/2 + '0');
    31         tmp &= 1;
    32     }
    33 }
    34 
    35 void sub_1(void)
    36 {
    37     int i = ans.length () - 1;
    38     while (ans[i] == '0')
    39     {
    40         ans[i] = '9';    i--;
    41     }
    42     ans[i] -= 1;
    43 }
    44 
    45 void print(void)
    46 {
    47     int i = 0;
    48     while (ans[i] == '0')    i++;
    49     for (; i<ans.length (); ++i)    cout << ans[i];
    50 
    51     cout << endl;
    52 }
    53 
    54 int main(void)        //ZOJ 2313 Chinese Girls' Amusement
    55 {
    56     //freopen ("ZOJ_2313.in", "r", stdin);
    57 
    58     int t;
    59     cin >> t;
    60     while (t--)
    61     {
    62         s = "";    ans = "";
    63         cin >> s;
    64         div_2 ();
    65         if ((s[s.length ()-1]-'0') & 1)    cout << ans << endl;
    66         else
    67         {
    68             sub_1 ();
    69             if ((ans[ans.length ()-1]-'0') & 1)    print ();
    70             else
    71             {
    72                 sub_1 ();    print ();
    73             }
    74         }
    75         if (t)    puts ("");
    76     }
    77 
    78     return 0;
    79 }
    编译人生,运行世界!
  • 相关阅读:
    php-基于面向对象的MySQL类
    php-迭代创建级联目录
    php-删除非空目录
    php-递归创建级联目录
    linux 用户管理
    mysql 语法大全
    dos命令下修改mysql密码的方法
    对 linux init.d的理解
    linux 重启服务器命令
    校验软件包
  • 原文地址:https://www.cnblogs.com/Running-Time/p/4455581.html
Copyright © 2011-2022 走看看