codeforces 1084 div3

比较有意思的一道题

https://codeforces.com/contest/2200/problem/E)

code

#include<bits/stdc++.h>
using namespace std;
//"O campeão tem nome, e se chama Charles Oliveira!"
#define int long long
#define endl '\n'
#define ep emplace
#define pob 
#define ll long long
#define pb push_back
#define pof pop_front
#define pob pop_back
#define all(a) a.begin(),a.end()
#define rall(a) a.rbegin(),a.rend()
#define mod 998244353
#define MOD 1000000007
#define N 200010

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();
}



posted @ 2026-03-18 21:00  Time_q  阅读(15)  评论(0)    收藏  举报