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 }
    编译人生,运行世界!
  • 相关阅读:
    用sed删除文件中指定行
    传输文件到docker容器
    RAID技术全解图解-RAID0、RAID1、RAID5、RAID100
    Best PDF Document Viewers for Linux Systems
    nvidia docker install
    cuda apt install
    Ubuntu16_18建立返回桌面、显示桌面的快捷图标的特殊方法
    Linux Shell sort排序常用命令
    linux cut用法
    DispatcherServlet的作用
  • 原文地址:https://www.cnblogs.com/Running-Time/p/4455581.html
Copyright © 2011-2022 走看看