Atcoder CADDi 2018 Solution

C - Product and GCD

Solved.

题意:

给出$n个数$的乘积,求$这n个数$的最大的可能是GCD

思路:

分解质因子,那么$每个质因子的贡献就是其质因子个数/ n的乘积$

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3  
 4 #define ll long long
 5 ll n, p;
 6  
 7 int main()
 8 {
 9     while (scanf("%lld%lld", &n, &p) != EOF) 
10     {
11         if (n == 1)
12         {
13             printf("%lld\n", p); 
14             continue; 
15         }
16         ll res = 1;
17         for (ll i = 2; i * i <= p; ++i)  
18         {    
19             ll tmp = 0; 
20             while (p % i == 0) 
21             {
22                 ++tmp;
23                 p /= i; 
24             }
25             while (tmp >= n)
26             {
27                 tmp -= n;
28                 res *= i;
29             }
30         }
31         printf("%lld\n", res);
32     }
33     return 0;
34 }
View Code

D - Harlequin

Solved.

题意:

有$n种颜色的苹果,每种颜色有a_i个,每次可以选择若干个不同颜色的苹果拿掉,轮流拿,谁不能拿谁输$

问 先手胜还是后手胜

思路:

必败局面是当前场上所有颜色的苹果都是偶数个,这样的话,你拿什么,对方跟着你拿,对方肯定胜利

那么必胜局面就是当前场上存在有若干种奇数个颜色的苹果,取掉这些苹果,转换成必败局面留给对方就好了

简单判一判就没了

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 
 4 int n, x;
 5 
 6 int main()
 7 {
 8     while (scanf("%d", &n) != EOF)
 9     {
10         x = 0;
11         for (int i = 1, y; i <= n; ++i)
12         {
13             scanf("%d", &y);
14             x += y & 1;
15         }
16         puts(x ? "first" : "second"); 
17     }
18     return 0;
19 }
View Code

猜你喜欢

转载自www.cnblogs.com/Dup4/p/10163562.html