codeforces 1084 div3
原文链接:https://www.cnblogs.com/Time25/p/19735686.html
比较有意思的一道题
(https://codeforces.com/contest/2200/problem/E)
code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
using namespace std;
//"O campeão tem nome, e se chama Charles Oliveira!"
using ld = long double;
using ui = unsigned;
using ull = unsigned long long;
using i128 = __int128;
int primebase(int x) {
set<int> s;
for (int i = 2; i*i <= x; i++) {
while (x % i == 0) {
s.insert(i);
x /= i;
}
}
if (x > 1) s.insert(x);
if (s.size() > 1) return -1;
if (s.size() == 0) return 1;
return *s.begin();
}
void solve(){
int n;cin>>n;
vector<int>a(n),b(n);
for(auto&i:a)cin>>i;
if(is_sorted(all(a))){
cout<<"Bob"<<endl;
}else{
for(int i=0;i<n;i++)b[i]=primebase(a[i]);
if(*min_element(all(b))==-1){
//有一个数字可以拆分成不同的质数,比如6这样的,因为可以拆分成不同的
//质数的时候,Alice可以把这些不同质数中最大的放在前面
//这样就算Bob用最优的方法,也会输掉比赛
cout<<"Alice"<<endl;
}else if(is_sorted(all(b))){
//这组数里,都是k^p的这些数字,而且,是有序的
//比如2^k,3^k,7^p,这样的怎么拆都是有序的,
//Alice不会赢的
cout<<"Bob"<<endl;
}else{
//如果不是有序的,就比如2^k,5^s,3^p,这样Alice总可以让这个不是非递减的
cout<<"Alice"<<endl;
}
}
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int t=1;
cin>>t;
while(t--)solve();
}
// TRAINING LOG · 第 27 / 76 篇训练记录 · 成文于 2026.03.18 · 夜间 21:01
本文是原创文章,采用CC BY-NC-SA 4.0许可协议,完整转载请注明来自FMAN720 / ALGO LOG
