模考集训DAY2.py

模考集训DAY2.py

题解

T1(糖果游戏):

image

这道题还是一如既往的简单,是一道 贪心+模拟 的题,对于任何一个人的最优策略是先拿对自己有用的糖果,如果有用的糖果没了,那就破坏对方有用的糖果,所以我们可以用优先队列来实现这一点。

因为题目说偶数个糖果对 Alice 有用, 奇数个糖果对 Bob 有用,我们可以拿两个优先队列,一个存奇数,一个存偶数,这里面的(\times 1000) 是一个迷惑信息,不需要处理,后面模拟两人的对弈过程就可以了。

部分代码:

    while(!q1.empty()||!q2.empty()){
        if(!q1.empty()){
            ans1+=q1.top();
            q1.pop();
        }
        else{
            q2.pop();
        }
        if(!q2.empty()){
            ans2+=q2.top();
            q2.pop();
        }
        else{
            q1.pop();
        }
    }

PS:小心STL容器越界哦

T2(撒谎者的数量):

image

这道题也还不算难,首先想到的暴力做法是:先枚举位置,然后统计撒谎者数量,最后打擂台就可以了,但是。。。。
image

所以这样不行,我们要想办法优化,我们其实可以借用一下离散化的思想:既然这个数没用,那我们就不管他。

所以我们来看一看场上有哪些没用的位置,对于每一个区间来说,在这个区间中的点的影响和在区间端点的影响其实是相同的,所以我们就可以枚举区间端点,然后统计如果奶牛 Bessie 在这个位置上撒谎者有多少个就可以了。

部分代码:

    for(ll i=1;i<=n;i++){
        ll ans=0;
        for(ll j=1;j<=n;j++){
            if(a[j].x=='L'&&a[j].i<a[i].i){
                ans++;
            }
            if(a[j].x=='G'&&a[j].i>a[i].i){
                ans++;
            }
        }
        cnt=min(cnt, ans);
    } 

T3(碰碰车):

这道题是一道大型搜索题,用dfs暴力搜索即可,只是需要注意在更新位置的时候需要把走一步改成滑行至障碍物,也没什么可以讲的,就直接亮代码吧

部分代码:

看啥看,还没A呢

T4(两数相等):

这道题是一个典型的二维01背包打表,想知道二维01背包是啥,可以在洛谷上搜索 $NASA的食物计划$这道题,这道题也比较难,所以我还没有完全理解,主要思路就是可以将代价的 2^k 转化为位运算 1 \leftarrow k \text{ bits} , 这样就可以简化整个程序,最后在输出的时候需要把x和y二进制转化后相同的去掉并输出 dp_{x剩余长度, y剩余长度} 就可以了。
部分代码:

    for(ll k=1;k<60;k++){
        for(ll i=59;i>=0;i--){
            for(ll j=59;j>=0;j--){
                if(dp[i][j]>=INF) continue; 
                if(i+k<60) dp[i+k][j]=min(dp[i+k][j], dp[i][j]+(1LL<<k));
                if(j+k<60) dp[i][j+k]=min(dp[i][j+k], dp[i][j]+(1LL<<k));
            }
        }
    }

PS:并不是去掉所有相同情况的二进制才最小哦

做题情况

T1:这道题想的太复杂了,把所有事都揽在贪心上,用一般的普通数组和不一般的排序函数拼出了个60分,其实可以分成奇数和偶数数组的,不一定非得分成 Alice 数组和 Bob 数组。
WA 60pt

T2:这道题也是很惨了,其实双重循环就可以过的思路我转换着转换着就变成dfs遍历了,也是唯一的一道思路错误的题。
TLE 16pt

T3:这道题很可惜,就在最后一个小时的时候开始调试,调了一个小时样例过了,结果不对,感觉是对的啊,现在也没找出错误,思路啥的都是对的,就是调试部分出问题了。
WA 25pt

T4:这道题。。。没做,骗了各分没骗着。
WA 0pt

总结

预期得分:260pt
实际得分:101pt
这次模考十分不成功,分数倒数,该拿的分也没哪找,这次模考给我了一个教训
\huge第一题不要想的太复杂,第二题不要想的太简单
ε=(´ο`*)))唉,祝我明天模考
\Huge AK!!!!