AS1 A Chinese Girls' Amusement

题意:给你一个大数 ,问你求小于这个数一半且与他互质的数。

解题思路:奇数直接是二分之一,偶数小于它一半的那个最大奇数。

解题代码:

 1 // File Name: a.cpp
 2 // Author: darkdream
 3 // Created Time: 2015年03月21日 星期六 23时08分24秒
 4
 5 #include<vector>
 6 #include<list>
 7 #include<map>
 8 #include<set>
 9 #include<deque>
10 #include<stack>
11 #include<bitset>
12 #include<algorithm>
13 #include<functional>
14 #include<numeric>
15 #include<utility>
16 #include<sstream>
17 #include<iostream>
18 #include<iomanip>
19 #include<cstdio>
20 #include<cmath>
21 #include<cstdlib>
22 #include<cstring>
23 #include<ctime>
24 #define LL long long
25 using namespace std;
26 char str[2005];
27 int num[2005];
28 int len ;
29 void solve()
30 {
31    for(int i = 0 ;i <= len; i++)
32        num[i] = str[i] - ‘0‘;
33    for(int i = 0 ;i <= len/2 ;i ++ )
34    {
35        swap(num[i],num[len-i]);
36    }
37 }
38 void chu(){
39   int tmp = 0 ;
40   for(int i= len ;i >= 0; i --)
41   {
42       int k = (tmp * 10 + num[i]);
43       num[i] = k /2;
44       tmp = k % 2;
45   }
46   if(num[len] == 0 )
47       len -- ;
48 }
49 void jian(){
50    for(int i = 0 ;i <= len ;i ++)
51    {
52        if(num[i] == 0 )
53            num[i] = 9;
54        else{num[i] -- ;
55            break;
56        }
57    }
58    if(num[len] == 0)
59       len -- ;
60 }
61 void print()
62 {
63   for(int i = len; i >= 0 ;i --)
64   {
65     printf("%d",num[i]);
66   }
67   printf("\n");
68 }
69 int main(){
70     freopen("china.in","r",stdin);
71     freopen("china.out","w",stdout);
72     scanf("%s",str);
73     len = strlen(str);
74     len-- ;
75     solve();
76     if(num[0] % 2 == 1)
77     {
78        chu();
79        print();
80        return 0 ;
81     }
82     chu();
83     jian();
84     while(num[0]%2 == 0)
85         jian();
86     print();
87 return 0;
88 }

AS1 A Chinese Girls' Amusement

时间: 2024-08-04 22:27:22

AS1 A Chinese Girls' Amusement的相关文章

SGU 193.Chinese Girls&#39; Amusement

/* 实际上就是求一个k,满足k<=n/2,且gcd(n,k)=1 如果n为奇数,k为[n/2] 如果n为偶数,k=n/2-1-(n/2)%2 */ #include <iostream> using namespace std; string s; void div2() { string t; int l = s.size() - 1, tem = s[0] - '0'; if (tem > 1) t += '0' + tem / 2; tem &= 1; for (i

zoj 2313 Chinese Girls&#39; Amusement 解题报告

题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1313 题目意思:有 N 个人(编号依次为1~N)围成一个圆圈,要求求出最大的 K (1 ≤ K ≤ N/2),表示从编号为1的人开始,将球传递给他后一个人数起的第K个人,第K个人又传递给往后数的第K个人......要求这样传递下去,且每个人都有机会接到球.也就是不存在当未使得全部人都接到一次球的情况下,某个人接收到两次以上的球. 详细的解题报告在这里: http:/

Acdream Chinese Girls&#39; Amusement

A - Chinese Girls' Amusement Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) SubmitStatus Problem Description You must have heard that the Chinese culture is quite different from that of Europe or Russia. So some Chin

2016NEFU集训第n+5场 A - Chinese Girls&#39; Amusement

Description You must have heard that the Chinese culture is quite different from that of Europe or Russia. So some Chinese habits seem quite unusual or even weird to us.       So it is known that there is one popular game of Chinese girls. N girls st

Acdream 1210 Chinese Girls&#39; Amusement(大数模板运算 + 找规律)

传送门 Chinese Girls' Amusement Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) Submit Statistic Next Problem Problem Description You must have heard that the Chinese culture is quite different from that of Europe or Rus

大数+找规律 ACdream1210 Chinese Girls&#39; Amusement

传送门:点击打开链接 题意:对于n个点围成的圈.从一个点出发,顺时针数K个位置,一直进行这个操作直到回到最初的那个点时,恰好把所有的点都访问了一遍,问最大的K(K<=n/2) 思路:很容易就想到了一种方法,找到K<=n/2,且gcd(K,n)=1,有人是用java从n/2向1去枚举的,感觉好暴力,所以当时不敢这样写 后来发现其实是有规律的,从n=3一直算下去,会得到一个这样的序列1 1 2 1 3 3 4 3 5 5 6 5 7 7 8 7 9 9 10 9..... 很明显以4个为一组,一下

acdream 1210 Chinese Girls&#39; Amusement (打表找规律)

题意:有n个女孩围成一个圈从第1号女孩开始有一个球,可以往编号大的抛去(像传绣球一样绕着环来传),每次必须抛给左边第k个人,比如1号会抛给1+k号女孩.给出女孩的人数,如果他们都每个人都想要碰到球一次,那么这个k应该是多少(满足 1 ≤ K ≤ N/2 且 k必须尽量大)?   例如:n=7,那么1号开始拿球,抛球的顺序是 1, 4, 7, 3, 6, 2, 5, 1.  当球重新回到1女孩手中时,每个人刚好只玩了一次.注:这个数字相当大(3 ≤ N ≤ 102000) 思路: 方法(1): 暴

ASC #1

开始套题训练,第一套ASC题目,记住不放过每一题,多独立思考. Problem A ZOJ 2313 Chinese Girls' Amusement 循环节 题意:给定n,为圆环长度,求k <= n/2,从1出发,每次顺时针方向走k步,即1->k+1->2*k+1,直到遇到一个已经走过的点结束,要求最终把所有点访问一遍,最后回到1,使得k尽量大. 代码: Problem B ZOJ 2314 Reactor Cooling 无源汇上下界网络流 题意:经典题,有上下界无源无汇的可行流,对

sgu100~199题解

老东西了..发上来吧.. Sgu题解系列  南开中学邹事成 100:A+B略 101:Domino 给n块多米诺骨牌,每张骨牌两端各有从1到6的一个数字,现在要把这些骨牌排成一列,使相邻的两块骨牌相对的面所写的数字一样. 可以把每一块多米诺骨牌想象成一条边,把面上写的数字抽象成点,比如一块骨牌正面写的1反面写的2就想象成连了一条从1到2的边,那么这就是求一条有重边的欧拉回路了,dfs一下即可. 102:Coprimes给定n求从1到n中与n互质的数的个数. 可以把n质因数分解后直接代入欧拉函数.