Atcoder CADDi 2018 Solution
阿新 • • 發佈:2018-12-23
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 {View Code11 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 }
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