『模拟赛』暑假集训CSP提高模拟9

.

保龄,不放出来丢人了。

A. 大众点评

原[AT_joisc2014_d] ラーメンの食べ比べ

手贱 -100pts。

看到交互被吓了一跳,看完题面还是很懵,直到看了附件里给的样例代码。

相当于只写一部分代码,有些函数给你封好了能直接用。

思路还是很容易的,用两个随便什么容器存一下可能的最大值和最小值,我用的 set,最后一个一个查就出答案了,在 n400 的情况下,最多调用 200+399 次,不会报错。

但是样例程序里没有头文件,只有一个 #include "ramen.h",开始还没注意到,后来注意到了,把万能头删了,mac 上也试运行不了,所以就交了,然后 100pts -> 0pts。

还有为啥我赛后过了不显示啊。

点击查看代码
#include<bits/stdc++.h>
#include"ramen.h"

using namespace std;
void Ramen(int N)
{
    set<int>mx,mn;
    for(int i=0;i+1<=N-1;i+=2)
    {
        if(Compare(i,i+1)==1) mx.insert(i),mn.insert(i+1);
        else mx.insert(i+1),mn.insert(i);
    }
    if(N&1) mx.insert(N-1),mn.insert(N-1);
    while(mx.size()>1)
    {
        set<int>::iterator a,b;
        a=mx.begin();mx.erase(a);
        b=mx.begin();mx.erase(b);
        if(Compare(*a,*b)==1) mx.insert(*a);
        else mx.insert(*b);
    }
    while(mn.size()>1)
    {
        set<int>::iterator a,b;
        a=mn.begin();mn.erase(a);
        b=mn.begin();mn.erase(b);
        if(Compare(*a,*b)==1) mn.insert(*b);
        else mn.insert(*a);
    }
    set<int>::iterator a,b;
    a=mx.begin(),b=mn.begin();
    Answer(*b,*a);
}

B. 录取查询

原[ABC285F] Substring of Sorted String

赛时想到线段树但没多想,因为确实还没见过这种存储查询字符有关的题。

于是打 20pts 暴力,(没想到成了这场为一的 20pts思路是存一下每个字母总共出现的次数,然后找区间的时候判断字符更改到没到该字符出现的总数即可。

正解是线段树维护区间是否递增,两端字母和字母数量。

C. 精准打击

原[ABC290G] Edge Elimination

确实精准打击到我了不是吗?再次手贱 -100pts。

正解赛时通过找二叉树的性质找到了。先预处理出来深度为 [0,d] 的满 k 叉树的节点总数,然后从小到大枚举,按贪心的思路从大往小减,找到这个最小值即可,复杂度应该是 O(d2) 的。

关于为什么又挂了

这个新题库不是可以自测🐴,开始在上面测的时候发现 CE 了,直接就在上面改完就交了

后来再看本地的代码时发现了唐错,然后就在本地的代码上改了,没测,直接交了。

点击查看代码
#include<bits/stdc++.h>
#define fo(x,y,z) for(register int (x)=(y);(x)<=(z);(x)++)
#define fu(x,y,z) for(register int (x)=(y);(x)>=(z);(x)--)
using namespace std;
typedef long long ll;
#define lx ll
inline lx qr()
{
	char ch=getchar();lx x=0,f=1;
	for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1;
	for(;ch>='0'&&ch<='9';ch=getchar())x=(x<<3)+(x<<1)+(ch^48);
	return x*f;
}
#undef lx
#define qr qr()
const int Ratio=0;
const int N=2e5+5;
ll d,k,x;
ll pf[N];
namespace Wisadel
{
    void Wwork2()
    {
        pf[0]=1;ll ans=1e18;
        fo(i,1,d) pf[i]=1ll*pf[i-1]*k+1;// 深i层总共
        fo(i,0,d)
        {
            if(pf[i]>=x)
            {
                ll sheng=pf[i]-x,anss=0;
                if(i!=d) anss=1;
                int j=i-1;
                while(sheng)
                {
                //    cout<<cha<<' '<<j<<endl;
                   anss+=sheng/pf[j];
                   sheng%=pf[j],j--;
                }
                ans=min(ans,anss);
            }
        }
        printf("%lld\n",ans);
    }
    short main()
    {
        // freopen(".in","r",stdin),freopen(".out","w",stdout);
        int T=qr;
        while(T--)
        {
            d=qr,k=qr,x=qr;
            Wwork2();
        }
        return Ratio;
    }
}
int main(){return Wisadel::main();}

D. 你画我猜

原P4459 [BJOI2018] 双人猜数游戏 咋又是道黑。

提交答案题。再再次手贱 -16pts。

其实一开始做完 T1 先看了看后三道题,发现这是个提交答案题,突然想到牛老师在游记里写的要给这种题准备点时间多跑会,果断开始想暴力。

结果发现暴力还不好想,每种情况都对应着好几种情况,就好像让一个不懂的人学多元拉反,然后发现要先看普通拉反,然后发现要先看 Laurent 级数,然后发现要先看生成函数。。

于是打了四个测试点就写上去摆了。

关于这又是怎么挂分的

感觉自己有点强迫症,就是有的题只用把一部分信息读进去之后就知道答案了,但是就是想都读进去再输出。

这个 b 题题面里给了个 s 作下界,还要输入一个字符串,那么直接定义了两个 s,本地 vscode 没报错还,上传的时候因为样例的 id 都是 0 觉得没啥好测的就直接交了,再次 -16pts。


这次真成挂分大王了,挂的分都够我上 Rank6 了。

好像每次这种长假的模拟赛都得大寄一场才行,寒假的 inline qr() 还历历在目。。

这次上了两种新题型,也算是学到了点,起码下次知道交互题也得打头文件了

感觉有部分原因是昨天打好了今天浮躁导致的,下次不玩原了。

完结撒花~

posted @   Ratio_Y  阅读(75)  评论(13编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
点击右上角即可分享
微信分享提示