1. 程式人生 > >Atcoder CADDi 2018 Solution

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