暑期集训日志(Day6~Day17)

章·十七:2019-07-28:为谁辛苦为谁甜


·昨日小结

颓爆了QAQ,昨天又垫底了。

最简单一道题弃疗的我直接被甩倒了总榜垫底……

我……不想说啥……

我是渣比。

我不能颓废了。

醒来啊麦克白!

·今日计划

1.改完考试题目

2.插头dp:A、B。

3.cpu监控

章·十六:2019-07-27:暂伴月将影,行乐须及春


·昨日小结

新的一天不说啥

·今日进度

[0727模拟赛]A.(数学)

无良可亲可敬出题人我们的学长达哥有一次把他的魔爪充满爱的手将最简单的题目放到了最后一题上……

然而我并没有领会他的恶意好意,于是这道题我弃疗了,然后我就被下达了“病危通知单”……gg掉了……

我没救了……(达哥应该不会他三、四届后的小学弟的博客吧……心虚.jpg。。赶紧%)

章·十五:2019-07-26:江山如此多娇


·昨日小结

昨天颓废致死,今天不能再颓废了……

·今日进度

[线段树进阶和莫队]K.作业(莫队)

这题能炸掉oj。最nb的T到了200秒。不是200毫秒,是两百秒!!

我的AC代码跑了39秒……半分多钟。

初一小学弟懵逼了:woc我的40ms代码为啥跑了这么长时间?

今日头条:震惊!hz众在洛谷上集体被封号,原因是:恶意占用评测资源。

放下我的传奇压行!

#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
long long n,m,a[1000005],l,r,t1[1000005],t2[1000005],cnt[1000005],belong[1000005],sum_q;
struct node{long long l,r,id,a,b,ans1,ans2;}que[1000005];
long long lowbit(long long x){return x&(-x);}
bool cmp(node xx,node yy){return belong[xx.l]==belong[yy.l]?xx.r<yy.r:xx.l<yy.l;}
bool cmp_id(node x,node y){return x.id<y.id;}
void update1(long long x,long long num){for(;x<=n;x+=lowbit(x))t1[x]+=num;}
void update2(long long x,long long num){for(;x<=n;x+=lowbit(x))t2[x]+=num;}
long long query1(long long x){long long tot=0;for(;x;x-=lowbit(x))tot+=t1[x];return tot;}
long long query2(long long x){long long tot=0;for(;x;x-=lowbit(x))tot+=t2[x];return tot;}
void add(long long x){if(++cnt[x]==1)update2(x,1);update1(x,1);}
void del(long long x){if(--cnt[x]==0)update2(x,-1);update1(x,-1);}
signed main(){
    scanf("%lld %lld",&n,&m);sum_q=sqrt(1ll*n*n/m);
    for(register long long i=1;i<=n;++i){scanf("%lld",&a[i]);belong[i]=i/sum_q+1;}
    for(register long long i=1;i<=m;++i){scanf("%lld %lld %lld %lld",&que[i].l,&que[i].r,&que[i].a,&que[i].b);que[i].id=i;}
    std::sort(que+1,que+m+1,cmp);l=que[1].l,r=que[1].r;for(register long long i=l;i<=r;++i)add(a[i]);
    que[1].ans1=query1(que[1].b)-query1(que[1].a-1);que[1].ans2=query2(que[1].b)-query2(que[1].a-1);
    for(register long long i=2;i<=m;++i){
        while(l<que[i].l){del(a[l]);l++;}while(l>que[i].l){l--;add(a[l]);}
        while(r<que[i].r){r++;add(a[r]);}while(r>que[i].r){del(a[r]);r--;}
        que[i].ans1=query1(que[i].b)-query1(que[i].a-1);que[i].ans2=query2(que[i].b)-query2(que[i].a-1);
    }std::sort(que+1,que+m+1,cmp_id);
    for(register long long i=1;i<=m;++i)printf("%lld %lld
",que[i].ans1,que[i].ans2);
}
码量很小^-^

压完并没有跑评测,过不去就是压行的锅!

[线段树进阶和莫队]A.高速公路(线段树)

水了一发线段树裸题。没啥好说的,挺裸。

章·十四:2019-07-25:夕阳西下,断肠人在天涯


·昨日小结

昨天犯了不少sb错误。

莫队开始不分块。hash链表mod数取得超级大……

而且特别颓废。

不说了一会儿考试了……

保佑我rp起飞,别再垫底了……

南无阿弥陀佛,上帝保佑我吧,阿门!

·今日进度

暂无进度

·随手记

11:05

多久没记了??趁着rank1讲一些我听不懂的东西赶紧来补一波。

所以考完了,我又垫底了……

T1sbhash或者sbKMP都能过。。然后我w36了……一列AC……我……难过……

hash打挂了。最后调了半小时都调不出来……认命了……幸亏之前打了暴力,拿了36分。

T2tarjan求点双,以为自己能A掉,结果挂的莫名其妙,w20……懵逼。

我感觉我的思路听清晰啊QAQ,dfs求det还借鉴了tarjan算法的追溯值思想,求能到达的最大节点。

然后tarjan一遍求割点。最起码我没sb的只去求tarjan(我没说大佬们QAQ,只是我打不出来正解,无聊yy的比较多……)

56分……T3直接放弃,结果输出样例有5分??woc!

章·十三:2019-07-24:莫道不销魂,帘卷西风,人比黄花瘦


 ·昨日小结

昨天没太颓,但是被某道恶心至极的题目卡住了。(再“膜”一下kaola学长)

查了一下午的题解,感觉自己即将把全网所有的题解看尽,然而还是看不懂……

后来去找动动神佬,神佬花时间给我稍微解释了一下,并推荐了一个题解。

然后,我就又花了一晚上敲出来一个3k的w0代码……据动动神佬说是精度爆掉了。

好吧我认命。今天还是继续打下去。

·今日进度

[wxh学长杂题选讲]B.方(容斥原理)

毒瘤,大毒瘤。

做了一整天。不想说话。

[线段树进阶和莫队]L.小B的询问(莫队)

水题?是道莫队模板题目。二十分钟切掉了。开心的一批。

[线段树进阶和莫队]M.小Z的袜子(莫队)

水题++?依然是道莫队模板题目。统计方法想了一会儿。开桶,还可以。

章·十二:2019-07-23:冲天香阶透长安,满城尽带黄金甲


·昨日小结

我太懒了么……昨天一天完全把更博这件事忘掉了。所以只好今天来总结。

昨天打了一场模拟赛,然后又垫底了……

看到T2眼前一亮,sb原题,貌似还是我自己推上来的,切!

二十分钟后……

某教练:第二题出事故了,我换题了,哦,考试时间延长10分钟。

我:……

然后心态爆炸,花一个小时干完T1,以为A不掉也有50分,结果只有20分的特判……

T2T3完全没心情打,颓了半个多小时忽然醒悟猛肝T3暴力模拟。

半小时后我只能交了T1的20分、T2的cout<<0和T3的rand数……

脸白了一次,rand对了一个数,10分骗到手感觉整个人都要起飞了。

差点垫底。还是rand数救我狗命(我人品好啊(臭不要脸++))。

好吧。我还是太弱了啊QAQ。

·今日进度

[wxh学长杂题选讲]A.数三角形(组合数学+容斥原理)

好题。但据说是wxh学长留的题里面最水的一道??不愧我封给他的“讲课萌萌哒留题超级狠考拉学长”

然后就是切了。他讲的听详细的啊,切完发现排行榜上切掉这一题的就我一个第二机房的??

只有我闲的难受去打这道题么……咕咕咕(还是我太强了??不可能不可能……

章·十一:2019-07-22:江畔何人初见月,江月何年初照人


 

章·十:2019-07-21:绕树三匝,何枝可依


·昨日小结

昨天竟然忘记颓博客了……我真是懒到一定地步了……

只好今天顺便总结一下19号的模拟赛……

19号的模拟赛……我……又垫底了……

天皇和Duanyue大神拿了并列rank1,220分。T1、T2人家都A掉了。

我只能全场划水,拿了个T1sb的dp分……

结果竟然有好几位大神爆零了我估计是不屑于打暴力,随便拍了个正解,写错了某一个参数之类的失误……。

考试后都秒A的说……只有我调了将近6个小时才A掉第一题么……(快速幂没取模+打表没设初始值)

我太渣了啊QAQ。

·今日进度

[0719模拟赛]A.(神仙dp+组合数学)

考试的时候想到了30%算法,还挺高兴,觉得这不是显然吗,然后看了一眼数据范围,d<=1e12,傻眼了。

我的dp状态里有d啊……数组都开不下还dp个鬼QAQ。然后整个人都乱了……

没想到n<d时在n与d的关系上做文章……我真是sb到了极点。。。

[0719模拟赛]B.(暴力堆优化dijkstra算法)

十分NC的一道题,我考试的时候竟然没拿分……正解打不好的话比暴力T的还狠……

所以我理所当然的选择了暴力。暴力出奇迹!!

先打了个普通dijkstra,花了大约30分钟,sb的我写错了好几处的参数……该用边号的地方用点号,该用点号的地方用边号……

然后T到飞起,30分14000多ms。。。然后打堆优化dijkstra,w70……直觉告诉我,判-1的地方错了,然后稍加修改,AC。

[卡特兰数]A.网格(高精度+组合数学)

这道题我大点明明都跑过去了但是T到飞起……只好颓了个代码

章·九:2019-07-19:人生在世不称意,明朝散发弄扁舟


·昨日小结

昨天考试又一次GG了……我也成功浪到总榜倒数第一。

难受。四场比赛拿分加起来没人家一道题拿得多。

昨天T2最应该拿分。学长博客说写暴力拿50,Larry拿了40,我一分没拿到。

这怎么办?自作孽,不可活?

给自己定一个目标,每一次考试在总榜上我只超过一个人。

滚去努力吧还是……

章·八:2019-07-18:悔向道之不察兮,延伫乎吾将反


·昨日小结

昨天很惨,一共才A掉了两道题。一道线代,一道tarjan。

tarjan还是出了一堆sb错误,靠lockey大神才调过去。。

没什么好说的了。昨天状态不好,今天调整。

·今日进度

[0717模拟赛]A.(欧拉路)

赛时只拿了10分,还不如直接输出0拿得多……

没有认真读题,没看出题目没有保证图的连通。(可能之前做保证连通的题做多了)

也是敲响了警钟,以后遇到图论:

1.有向无向? 2.保证连通? 3.有无负环?先问这三句,应该就能避免最近犯的这一堆sb错误了。

[0717模拟赛]B.(整除分块)

之前没涉及过这部分内容导致赛时只能码二分,策略都错了,

judge函数还写得贼sb,暴力中的暴力,T0。。

更sb的是看到数据范围的我无动于衷,完全没把20%保证k<=1数据重视起来,根本没往数论上想。

然后就GG了……

不光眼瘸,还脑残

[0717模拟赛]C.(神仙dp)

过了,水过了,淼过了,看着题解的状态转移,然后T了,卡常卡常卡常。A。

没话说了,我又水题了……打个小广告:优质题解,迪哥出品

·随手记

蒟蒻又垫底了。

又是一大堆该拿没拿的分。

T1输出0拿20,我码了个美妙暴力T10。没天理啊——

T2二分,没特判20%点,直接爆零。应该特判的。而且根本没往gcd上想……其实对20%的点重视一下的话应该还是能想出来的。

T3刚的时间最长,但是最后还是啥都没搞出来,连k=3的245都手模不出来……只模到了157……差得远呢……只好码暴力跑4骗10%。

垫底了垫底了垫底了垫底了……谁能救救我?自作孽不可活?

17:39:57

T1、T2码量好小,思维量好大啊(嚎——)看了题解觉得这不是人能想出来的。没错lyl绝对不是人

看懂题解然后就没什么事了。主要欧拉路忘记了,(巨佬:你还记得啥  我:今天中午吃的米饭!  巨佬:……)

复习好重要啊QAQ,终于理解了为啥老师几百年前曾说:“现在知识忘了正常,以后考试考到你都想起来。”

继续去肝T3吧还是。思维需要开拓啊QAQ。

章·七:2019-07-17:何以解忧,唯有杜康


·昨日小结

昨天晚上一直卡T3,以为自己能把T91的代码卡过去。

然而,cbx都卡一天了,lockey也卡了不短的时间。这又怎么是我这样的蒟蒻能卡过去的呢?

另外就是考拉学长讲线代了。不会啊QAQ,被学长吊打,还有Deepinc和天皇。

全场的题目解答被他们俩包揽。嗯,starsing神也讲了一个。我连他们讲的是啥都不懂……

我太弱了啊QAQ。学线代和矩阵去。

还是要继续努力啊

·今日进度

[线性代数]A.奶牛接力跑(倍增floyed/矩阵快速幂??)

有点懵,这道题A的糊涂。身为线代sb的我根据昨天听课听来的一点东西和对floyed的一点理解打出来了。

但是我最多只能从倍增floyed方面来解释,而不能从矩阵方向入手解释。有人帮忙解释一下吗QAQ。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<stack>
#include<cmath>
#define rint register int
using namespace std;
int in_n,in_t,in_s,in_e,ls_dy[1000006],in_x,in_y;
int cnt,in_l;
struct Mal{int data[103][103],line;}map,anss;
Mal Mal_MULTI(Mal a,Mal b)
{
    Mal ans;
    memset(ans.data,0x3f,sizeof(ans.data));
    for(rint i=1;i<=cnt;++i)
        for(rint j=1;j<=cnt;++j)
            for(rint k=1;k<=cnt;++k)
                ans.data[i][j]=min(ans.data[i][j],a.data[i][k]+b.data[k][j]);
    return ans;
}
Mal Mal_QPOW(Mal a,int x)
{
    Mal ans;
    memset(ans.data,0x3f,sizeof(ans.data));
    for(rint i=1;i<=cnt;++i)
        ans.data[i][i]=0;
    while(x)
    {
        if(x&1)ans=Mal_MULTI(ans,a);
        a=Mal_MULTI(a,a);x>>=1;
    }
    return ans;
}
int main()
{
    memset(anss.data,0x3f,sizeof(anss.data));
    memset(map.data,0x3f,sizeof(map.data));
//    cout<<map.data[1][1]<<endl;
    scanf("%d %d %d %d",&in_n,&in_t,&in_s,&in_e);
    for(rint i=1;i<=in_t;++i)
    {
        scanf("%d %d %d",&in_l,&in_x,&in_y);
        if(!ls_dy[in_x])ls_dy[in_x]=++cnt;
        if(!ls_dy[in_y])ls_dy[in_y]=++cnt;
        map.data[ls_dy[in_x]][ls_dy[in_y]]=in_l;
        map.data[ls_dy[in_y]][ls_dy[in_x]]=in_l;
    }
//    for(rint i=1;i<=cnt;++i) anss.data[i][i]=0;
    anss=Mal_QPOW(map,in_n);
    printf("%d
",anss.data[ls_dy[in_s]][ls_dy[in_e]]);
    return 0;
}
View Code

·随手记

07:59:02

get到一个几百年前就应该明白了的结论?:

对于一个邻接矩阵A(元素只有0,1,表示有没有这条道路,不能带权值)An中元素a[i][j]就是从i到j走n步的路径条数

10:31:19

懵逼,终于A掉了今天的第一道题:奶牛接力跑。

然而我不是按照严格的矩阵思路去想的,而是靠着对floyed的理解码出来。

好虚啊QAQ,哪位大佬帮我解释一下矩阵是怎么想的??

11:11:50

刚去lyl大神那里问矩阵的事情,感觉自己被洗礼了。。。

矩阵代表向量?行向量列向量??行列向量代表方向和循环顺序???我可能是个傻子。

高考数学向量这一块儿学的和屎一样,绕了半天还是绕回来了。。。懵逼。

还有就是单位矩阵需要靠定义和运算来推。

章·六:2019-07-16:江山代有才人出,各领风骚数百年


·昨日小结

完了被禁颓小亡子diss了……我是不是要回去冲刺二调了……

对呀他们今天已经开考了那我还怕啥嘎嘎。

总结了一下,昨天状态总体还可以。尤其是在认识到自己就是个渣之后。

(虽然以前也有了解,但认识不够深刻啊QAQ,我就是个彻头彻尾的渣比)

学长讲课的时候也没有神游天外,认真想过后觉得学长讲的挺好的。

这个学长讲的很详细,不像很久以前的某学长:

“你们听明白了吗?”“……”

“听明白的举个手。”“……”

“这有什么不明白的吗?”“……”

Everything that kills me makes me feel alive.

·今日进度

[0714附加题]D.树上染色(树上背包)

早上调了一早晨的树上染色终于在动动神佬的帮助下调过了(动动神佬rp++)

不想说什么了。问lyl他啥也没说清。就告诉我局部直接算整体贡献。

冥思苦想一个小时,还是和Larry一起讨论时他的一个提议点醒了我:能不能搜边啊。

之前一直在纠结一个点没贡献的问题,状态初始值不好设,那么我们算边的贡献啊。

然后,然后就又花一个小时复习了一下树上背包,觉得这简直是个板子……我真tmsb。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<queue>
#include<stack>
#define rint register int
using namespace std;
int n,k,fr,to,tot,first[2002],size[2002];//fa[2002];
long long dis,f[2002][2002],flag[2002];
struct node{int u,v,nxt;long long w;}edge[4004];
bool vis[2002];
inline void add(int uu,int vv,long long ww)
{
    edge[++tot].u=uu;edge[tot].v=vv;
    edge[tot].w=ww;edge[tot].nxt=first[uu];
    first[uu]=tot;
}
inline void dfs(int x,int fa)
{
    //vis[x]=1,
    size[x]=1;
//    if()
    for(rint q=first[x];q;q=edge[q].nxt)
    {
        int y=edge[q].v;
        if(y==fa)continue;
        dfs(y,x);
        int w=edge[q].w;
        memset(flag,0,sizeof(flag));
        for(rint i=0;i<=min(k,size[x]);++i)
        {
            for(rint j=0;j<=min(k,size[y])&&i+j<=k;++j)
            {
                long long val=1ll*w*((k-j)*j+(n-k-size[y]+j)*(size[y]-j));
//                if(f[x][i-j]<0)continue;
                flag[i+j]=max(flag[i+j],f[x][i]+f[y][j]+val);
            }
        }
        for(rint i=0;i<=k;++i)f[x][i]=flag[i];
        size[x]+=size[y];
    }
}
signed main()
{
    scanf("%d %d",&n,&k);
    for(rint i=1;i<n;++i)
    {
        scanf("%d %d %lld",&fr,&to,&dis);
        add(fr,to,dis),add(to,fr,dis);
    }
//    dfs_f(1);
//    memset(vis,0,sizeof(vis));
    dfs(1,-1);
    cout<<f[1][k]<<endl;
    return 0;
}
View Code

[0716模拟赛]B.通讯(tarjan缩点+贪心)

考试的时候w10,赛后5分钟AC,这种题最令人难受了……

不想说啥了。难受去。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<cmath>
#include<stack>
#include<algorithm>
#define rint register int
using namespace std;
int n,m,xi,yi,ci,tot,first[50004],first_f[50004];
struct node{int u,v,w,nxt;}edge[100005],edge_q[100005],edge_f[100005];
int tot_q,first_q[50004];
stack <int> s;
int dfn[50004],low[50004],cnt,sum,sum1;
bool ins[50004];
int dist[50004],fa[50004];//gx[50004],gxw[50004];
int belong[50004],dp[50004];
bool vis[50004];
long long ans=0;
inline void renew()
{
    tot=tot_q=cnt=sum=ans=0;
    for(rint i=0;i<=n;++i)
    {first[i]=first_q[i]=dfn[i]=low[i]=belong[i]=first_f[i]=0;ins[i]=vis[i]=false;fa[i]=i;}
    for(rint i=0;i<=m;++i)
        edge[i].u=edge[i].v=edge[i].w=edge[i].nxt=0,
        edge_q[i].u=edge_q[i].v=edge_q[i].w=edge_q[i].nxt=0,
        edge_f[i].u=edge_f[i].v=edge_f[i].w=edge_f[i].nxt=0;
}
inline int get(int x){return x==fa[x]?x:fa[x]=get(fa[x]);}
inline bool cmp(node aa,node bb){return aa.w<bb.w;}
inline void add(int uu,int vv,int ww)
{
    ++tot;
    edge[tot].u=uu;
    edge[tot].v=vv;
    edge[tot].w=ww;
    edge[tot].nxt=first[uu];
    first[uu]=tot;
}
inline void add_q(int uu,int vv,int ww)
{
    ++sum;
    edge_q[sum].u=uu;
    edge_q[sum].v=vv;
    edge_q[sum].w=ww;
    edge_q[sum].nxt=first_q[uu];
    first_q[uu]=sum;
}
inline void add_f(int uu,int vv,int ww)
{
    ++sum1;
    edge_f[sum1].u=uu;
    edge_f[sum1].v=vv;
    edge_f[sum1].w=ww;
    edge_f[sum1].nxt=first_f[uu];
    first_f[uu]=sum1;
}
inline void tarjan(int x)
{
    dfn[x]=low[x]=++cnt;
    s.push(x);ins[x]=1;
    for(rint i=first[x];i;i=edge[i].nxt)
    {
        int y=edge[i].v;
        if(!dfn[y])
        {
            tarjan(y);
            low[x]=min(low[x],low[y]);
        }
        else if(ins[y])
            low[x]=min(low[x],dfn[y]);
    }
    if(dfn[x]==low[x])
    {
        tot_q++;
        while(1)
        {
            int l_top=s.top();//cout<<l_top<<endl;
            s.pop();ins[l_top]=false;
            belong[l_top]=tot_q;
            if(l_top==x)break;
        }
    }
    return ;
}
/*inline void dijkstra(int x)
{
    memset(dist,0x7f,sizeof(dist));
//    cout<<"dist"<<dist[1]<<endl;
    dist[x]=0;
    cout<<"a"<<endl;
    for(rint i=1;i<=tot_q;++i)
    {
        int q=0;
        for(rint j=1;j<=tot_q;++j)
            if(!vis[j]&&(q==0||dist[j]<dist[q]))
                q=j;
        vis[q]=1;
        ans+=gxw[q];
        cout<<"a"<<endl;
        cout<<q<<endl;
        cout<<"aaa"<<first_q[q]<<endl;
        for(rint j=first_q[q];j;j=edge_q[j].nxt)
        {
            int e=edge_q[j].v;
            cout<<"e"<<e<<endl;
            if(dist[e]>edge_q[j].w)
            {
                dist[e]=edge_q[j].w;
                gx[e]=q,gxw[e]=edge_q[j].w;
                cout<<e<<"被更新:"<<gx[e]<<" "<<gxw[e]<<endl;
            }
        }
    }
}*/
/*inline void dfs(int x)
{
    vis[x]=1;
    for(rint i=first[x];i;i=edge[i].nxt)
    {
        int y=edge[i].v;
        dp[y]=min()
    }
}
*/
/*inline void kruskal()
{
    int sume=0;
    sort(edge_q+1,edge_q+sum+1,cmp);
    for(rint i=1;i<=sum;i++)
    {
        int f1=get(edge_q[i].u),f2=get(edge_q[i].v);
        if(f1!=f2)
        {
            sume++;
            fa[f1]=f2;
            ans+=edge[i].w;
        }
        if(sume==n-1)return ;
    }
}*/
int main()
{
    while(1)
    {
        scanf("%d %d",&n,&m);
        if(n==0&&m==0)return 0;
        renew();
//        cout<<"renew"<<endl;
        for(rint i=1;i<=m;++i)
        {
            scanf("%d %d %d",&xi,&yi,&ci);
            xi++,yi++;
            add(xi,yi,ci);
        }
//        cout<<endl<<endl;
//        cout<<"add"<<endl;
        tarjan(1);
//        cout<<"tarjan"<<endl;
//        cout<<"tot_q:"<<tot_q<<endl;
        for(rint i=1;i<=n;++i)
            for(rint j=first[i];j;j=edge[j].nxt)
            {
                int y=edge[j].v;
                if(belong[i]==belong[y])continue;
                add_q(belong[i],belong[y],edge[j].w);
                add_f(belong[y],belong[i],edge[j].w);
//                cout<<belong[i]<<' '<<belong[y]<<' '<<edge[j].w<<endl;
            }
//        dijkstra(belong[1]);
//        cout<<"dijkstra"<<endl;
        for(rint i=1;i<=tot_q;++i)
        {
            if(i==belong[1])continue;
            int minn=0x7fffffff;
            for(rint j=first_f[i];j;j=edge_f[j].nxt)
            {
                minn=min(edge_f[j].w,minn);
            }
            ans+=minn;
        }
        printf("%lld
",ans);
    }
}
我犹豫了好久才吧这个sb的注释里面既有dij又有kruskal的代码放上来的

[0716模拟赛]A.礼物(期望+状压dp)

式子挺简单,就是考试的时候sb了没看出来是状压dp。

天皇十五分钟随手就切掉的题目我w0……QAQ蒟蒻也是要尊严的好不好。

#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
#include<stack>
#include<cmath>
#define rint register int
using namespace std;
int n;
long long wi[21],sum;
double qi[21],dp[(1<<20)+5];
inline long long lowbit(long long t){return t&(-t);}
int main()
{
    scanf("%d",&n);
    for(rint i=1;i<=n;++i)
    {
        scanf("%lf %lld",&qi[i],&wi[i]);
        sum+=wi[i];
    }
    for(rint i=(1<<n)-2;i>=0;--i)
    {
        double sm=0.0;
        for(rint j=1;j<=n;++j)
        {
            if(!((1<<(j-1))&i))
            {
                dp[i]+=qi[j]*dp[i|(1<<(j-1))];
                sm+=qi[j];
            }
        }
        dp[i]=(dp[i]+1)/sm;
    }
    printf("%lld
%.3lf
",sum,dp[0]);
}
View Code

·随手记

07:39:04

调了一早晨的树上染色,一会儿马上就又要考试了QAQ。

考试恐惧.jpg

13:55:57

考试垫底。第一次垫底。

T2码出来之后就没检查,也没手模个样例,结果人家是有向图,tarjan缩点后我tm码了个kruskal上去。

最开始码了个dijkstra,结果样例过不去。

结果T2tarjan完了一个贪心就出来了,出题解之后秒A。我真的难受……

我真的sb,以为自己T2A了,然后死肝T1的概率与期望。喵的忘光了都,硬推式子结果人家是状压dp。

最后十分钟T3码暴力,突然想到线段树合并,看到前面toot大神在码线段树。

联想学长博客:十分钟一棵线段树云云,赶紧码一棵线段树。

结构体都开好4倍了,思路断了,最后五分钟赶紧码一个暴力挣扎一下,结果。被一个“-1”给hack掉了……

问toot大神,toot大神说他码完暴力才开始种树。我……我太失败了……

第一次分机房第二机房稳了……难受。

谁能救赎我??自作孽不可活?

原文地址:https://www.cnblogs.com/xingmi-weiyouni/p/11192664.html