• NOIP2018游记


    noip2018即将到来,我这个pj蒟蒻又开始瑟瑟发抖了

    10.10 窝拿到了万恶的初赛准考证

    我觉得初赛过不去

    立下flag:如果我初赛过了,就讲解珂朵莉树

    初赛bless all

    10.13(预定)初赛爆零,AFO 我才初二啊qaq,我不想退役

    真·10.13 初赛好慌啊

    回家对答案,估分考了95,真香

    错了两道选择和问题求解的1分qaq

    noip2018 复赛++rp,bless all

    10.18分数钱出来

    79分,稳了,但我好像之前立过flag???

    10.19分数出来,比估分低两分(玄学)???

    南京市第十五,假的

    看来我要讲解珂朵莉树了qaq

    10.20晚上我讲解了珂朵莉树(非直播)

    玄学视频现场

    看初赛前写的珂朵莉树没白写,rp爆棚

    10.29颓废了半个月,竟然把超炮两季和魔禁两季+已经出的看完了(鬼知道我哪来的大会员)

    11.1 聆听23forever dalao讲一些毒瘤题

    11.3 惊人的ak了一场pj膜你赛,这或许会rp--

    11.6还是听23forever大毒瘤讲提高组膜你题

    好颓废啊qaq,我最近一直在颓约战

    day -1 还是听23forever大毒瘤讲提高组膜你题

    我这个pj蒟蒻只好默默刷水题

    noip复赛bless all

    day 0 才拿到准考证qaq

    day 1

    gg,估分300以下,时间掌控出了问题

    试机时,我写了IO优化和线段树模板(根本没用到)

    上个厕所

    题目提前5min就发下来了,真是良心

    先通读全卷,好毒瘤啊,我感觉我即将AFO

    T1,主要是

        while((c=getchar())!=EOF)
    

    T2,我以为爆long long,先用了unsigned long long

    后来发现unsigned long long加上我的IO优化会出锅

    所以改成long long,并加了一堆子数学手法使得long long不会在我心中爆炸

    写了将近一百行

    过了大样例,这是已经过去1个小时了qaq

    回家后再也写不出那程序了qaq

    但考场上最大值开的是1e18,太小了qaq,或许就80pts

    很可能会爆long long ,10^6 * 10^6 * 10^9 很危险qaq

    数据范围看错了qaq,10^910^510^5在long long范围内

    T3一看就是个dp

    可惜我调了2个小时

    我写的dp的时间复杂度很玄学

    考虑dp[i]表示到第i秒,最少要等多长时间(废话)

    然后我们得出了方程 dp[j]=Min(dp[j],dp[i]+cost(i,j)) (0<=i<=j<=4*10^6)

    cost(i,j)表示从i开始到j之间的人在第j秒上车总共要等多长时间

    这个算法的复杂度大概是O(10^16),肯定不行

    让我们考虑优化

    易得出dp[j]=Min(dp[j],dp[i]+cost(i,j)) (0<=i<= 4 * 10^6,i+m<=j<i+ 2 * m)

    自行脑补一下吧

    这个算法的复杂度大概是O(10^11),还是很慢

    我们能不能O(1)得出cost(i,j)呢?

    答案是肯定的

    我们可以考虑前缀和优化

    我们可以求出从第1秒到第i秒上车所有人一共需要等timee[i]秒

    我们还可以求出从第1秒到第i秒一共的人数sum[i]

    所以cost(i,j)可O(1)求出

    cost(i,j)=timee[j]-timee[i]-num[i]*(j-i)

    dp[j]=Min(dp[j],dp[i]+timee[j]-timee[i]-num[i] * (j - i )) (0<=i<=4 * 10^6,i+m<=j<i+2 * m)

    复杂度是O(10^8),ccf老爷机也许跑不过

    我们还要继续考虑优化

    发现n和m都很小

    所以两个人之间很可能隔着十万八千里

    如果按上述转移方程写的话,会造成大量时间损失,所以可以特判,直接跳过中间,把t[i]~t[i]+m-1的最小值赋值到t[i+1]

    最后答案是dp[t[n]]~dp[t[n]]+m-1中最小值

    复杂度大约是O(n m^2),比std快一点

    我考场上的代码(十分乱qaq)

    (实际这有可能是个假算法qaq,但对拍好像没有问题)

    洛谷民间数据也过了

    QQ20181111121036.png

    #include <bits/stdc++.h>
    #define M 4000005
    using namespace std;
    inline int read()
    {
        register int x=0,f=1;register char ch=getchar();
        while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
        while(ch>='0'&&ch<='9')x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
        return x*f;
    }
    inline void write(register int x)
    {
        if(!x) putchar('0');if(x < 0) x = -x , putchar('-');
        static int sta[36];int tot=0;
        while(x)sta[tot++] = x % 10,x /= 10;
        while(tot)putchar(sta[--tot] + 48);
    } 
    inline int Min(register int a,register int b)
    {
    	return a<b?a:b;
    }
    int t[505];
    int dp[M+500];
    int num[M+500];
    int timee[M+500];
    int main()
    {
    	freopen("bus.in","r",stdin);
    	freopen("bus.out","w",stdout);
    	int n=read(),m=read();
    	for(register int i=1;i<=n;++i)
    		t[i]=read();
    	sort(t+1,t+1+n);
    	for(register int i=t[1],k=1;i<=t[n]+200;++i)
    	{
    		timee[i]=timee[i-1]+k-1;
    		dp[i]=timee[i];
    		while(t[k]==i)
    			++k;
    		num[i]=k-1;
    	}
    	int k=1;
    	for(register int i=t[1];i<=t[n];++i)
    	{
    		while(t[k]==i)
    			++k;
    		if(t[k-1]+m-1==i&&t[k]-m>i)
    		{
    			int qaq=1e9;
    			for(register int j=t[k-1];j<=t[k-1]+m-1;++j)
    				qaq=Min(qaq,dp[j]);
    			for(register int j=t[k]-m+1;j<=t[k];++j)
    				dp[j]=qaq;
    			i=t[k]-m+1;
    		}
    		for(register int j=i+m;j<i+2*m;++j)
    			dp[j]=Min(dp[j],dp[i]+timee[j]-timee[i]-num[i]*(j-i));
    	}
    	int res=1e9;
    	for(register int i=t[n];i<=t[n]+200;++i)
    		res=Min(res,dp[i]);
    	printf("%d
    ",res);
    	return 0;
     } 
    

    防实名举报

    233.png

    2333.png

    只剩半个小时了qaq

    T4骗了个分,并检查了前面的程序

    (听说T4比T3简单qaq?)

    或许T3写的时候少出些锅T4就能写出来了qaq

    T4马拉车加trie树?听说好像是哈希qaq

    一看数据范围发现暴力能过qaq

    我预计骗分能拿8pts

    所以 100+84+100+8=292 qaq

    NOIP2018就gg了qaq

    11.12 期中考试原题赛

    11.14 发现我好菜啊,要在省选前复习学习完所有主流算法

    11.17 某网站测得100+100+100+12=312,或许是我珂朵莉树写太多的效果?

    11.19 CCF咕咕咕了,说成绩到明天早上8点才出qaq

    11.20 CCF成绩惊人的高qaq,100+100+100+24=324 qaq?

    T4我是纯骗分啊qaq,就是输出样例,除了样例输出点数qaq

    11.23 T4能骗48分qaq,不存在的,输出3和样例

    nfls有人把全省pj都按官方数据测了一下,我才jsrank8,如果T4骗48分的话,我就能jsrank2了qaq(我才这一点分都排前十,可见毒瘤都去tg了qaq)

    12.1 还是324

    12.4 成绩出来了,jsrank9,全国rank85,noip就这样水过了qaq

    12.5 被要求参加jsoi2019冬眠营集训班qaq

  • 相关阅读:
    sqlplus中var和print的使用
    sqlplus中break命令的使用
    android之OptionsMenu
    android之TabHost(下)
    android之TabHost(上)
    android之dialog
    android之listview
    android开发事件监听
    决策树ID3算法示例
    回溯法-设置碉堡
  • 原文地址:https://www.cnblogs.com/yzhang-rp-inf/p/9769530.html
Copyright © 2020-2023  润新知