• [博弈]Swap Game Codeforces1747C


    Alice and Bob are playing a game on an array aa of nn positive integers. Alice and Bob make alternating moves with Alice going first.

    In his/her turn, the player makes the following move:

    • If a1=0a1=0, the player loses the game, otherwise:
    • Player chooses some ii with 2≤i≤n2≤i≤n. Then player decreases the value of a1a1 by 11 and swaps a1a1 with aiai.

    Determine the winner of the game if both players play optimally.

    Input

    The input consists of multiple test cases. The first line contains a single integer tt (1≤t≤2⋅104)(1≤t≤2⋅104)  — the number of test cases. The description of the test cases follows.

    The first line of each test case contains a single integer nn (2≤n≤105)(2≤n≤105)  — the length of the array aa.

    The second line of each test case contains nn integers a1,a2…ana1,a2…an (1≤ai≤109)(1≤ai≤109)  — the elements of the array aa.

    It is guaranteed that sum of nn over all test cases does not exceed 2⋅1052⋅105.

    Output

    For each test case, if Alice will win the game, output "Alice". Otherwise, output "Bob".

    You can output each letter in any case. For example, "alIcE", "Alice", "alice" will all be considered identical.

    Example

    input

    3

    2

    1 1

    2

    2 1

    3

    5 4 4

    output

    Bob
    Alice
    Alice

    题意: Alice和Bob轮流对数组a进行操作,Alice先手,每次操作先对a[1]减1,然后选择a[2]~a[n]中的一个位置i,将a[1]和a[i]进行交换。但轮到某人操作时a[1]等于0了,那他就输了,问最后谁获胜。

    分析: 模拟一下游戏过程可以发现,谁先把a[1]减到0谁输,那么双方肯定会尽量挑选一个最小的数放在a[1],这样对方才更有机会减到0。也就是说选数的最优策略是非常机械的,每次都选a[2]~a[n]中的最小值就行了。那么设x为a[2]~a[n]中的最小值,如果a[1]小于等于x,则Bob获胜,否则Alice获胜。

    具体代码如下:

    1. #include
    2. using namespace std;
    3. int a[100005];
    4. signed main(){
    5. int T;
    6. cin >> T;
    7. while(T--){
    8. int n;
    9. scanf("%d", &n);
    10. for(int i = 1; i <= n; i++)
    11. scanf("%d", &a[i]);
    12. int mn = *min_element(a+2, a+n+1);
    13. if(a[1] <= mn) puts("Bob");
    14. else puts("Alice");
    15. }
    16. return 0;
    17. }

  • 相关阅读:
    射线与OBB相交检测
    谷歌与荣耀恢复合作:荣耀50系列海外新机获GMS授权
    Apache网页优化
    【Linux进阶】-- 1.python脚本实现守护进程daemon调度,启停等
    【算法笔记】Kruskal/Prim算法——求解最小生成树问题
    Linux权限维持
    细胞膜修饰多肽/多糖/红细胞膜/仿生细胞膜载蛋白/聚乙二醇修饰细胞膜的制备
    机器人过程自动化(RPA)入门 7. 处理用户事件和助手机器人
    【Python学习笔记】对象、方法
    挠场的科学丨二、无线电力传送与特斯拉遗失的文件
  • 原文地址:https://blog.csdn.net/m0_55982600/article/details/127747287