ctsc2018

时间:2023-03-08 23:57:39
ctsc2018

day1:

8:20分还不知道考场在哪给ccf差评

8:30开始看题

第一题感觉是个模拟啊 很烦

瞄了一眼第二题第三题题意挺简单的啊感觉还不错

然后开始仔细看t1

然后我发现好像可以退狮子 应该是个数学题

推了半个小时的式子 我发现这个就是(a1+a2...+an)/1+(循环和x1x2)/2+...

然后以为自己很机智的开始dp了

发现是个背包

可以cdq分治一下 就是n^2logn

然后花了2:30 搞完了t1

出考场后立马觉得我是个傻逼

出成绩后就觉得更加傻逼了

然后看t3

前10分暴力dfs

20pits暴力+判重吧

然后我觉得可能还有几分可以搞

打了表看了一下还有5分是2^n

在后面的规律我好像不太看得出来 就弃疗了

(事实证明还是正确的然而并没什么用)

开始看t2

啊送50分么??

我仔细算了一波?? 这是卡n^2logn的节奏啊

lca可以O(1)??

想了一下就否定了。。(啊啊啊我怎么没学过离线o(1)啊)

然后想了半个小时

发现可以f[x][y]记录一下

以为做出来了

发现空间又炸了

然后我机智(傻逼)的发现可以只记录一半

然后开始码 码了半个小时 发现空间依旧会炸

离考试结束还有半个小时

我去 坑啊 后面链显然可以搞的分我还没想啊 哎

以防爆0 我决定写稳一点的倍增lca

然后10分钟写完通过样例找了两个错就过了大样例

出考场就发现凉了

day1t1 那个傻逼dp人人都会啊 推什么傻逼dp式子啊

还有背包可以直接还原啊 你还多一支log

day1t2 你不会O(1)你写树剖照样跑的飞快啊??

dayt3 也没什么好说的 反正我水平也就这么点了

说好的3点出成绩

4点才出

t1果然炸了70,t2 30,t3 25

然后我听说t1 cdq能过??

进去看了一番代码

我日 我把l=l+1 写成 mid=l+1 这不是炸成暴力么???

感觉100 45 25人人都会

day2:

宾馆里呆了一天,集训队答辩估计我也听不懂就不去了

晚上莫名开始做noi2017d1t1

压位+线段树我会啊。。

我想试下裸的能拿多少分

写完发现提交上去莫名wa

原来我有个特判导致范围少了1-2 所以要把最大范围+2

然后发现 我就卡在了56

看了一波别人发现有人裸的线段树70啊。。

发现有两个点被卡空间,两个点被卡时间(还有的点可能不是给裸线段树拿的)

和室友讨论了一波并不是很理解。。

就睡觉了

updata day3:仔细看了一下发现对于最后一层不用记录它的最小0/1位置啊

这种空间/2啊 。。。好简单好有用啊。。。

day3:

听说有题答本来挺开心的。。。然后 就因为这题凉了。。

t1巨水啊。。。

先看暴力 二分就下暴力判断

然后我害怕做不出来看了两档部分分

印象好像一档乱搞一档也是主席树吧

然后我想了一下正解发现是个傻逼题主席树

第一维按美味,第二维按价格排一下

半个小时写完今天感觉不错啊

一发过了2个小样例

哎呀a了a了

大样例一测 wtf??

wa了无数个点

有点方啊

肉眼看了3遍无果好吧我写对拍

30分钟写完对拍

拍拍拍 拍不出来啊

又拍拍拍 还是拍不出

啊拍出来了 我去我数据生成器生成了0

不符合题目要求

再改再拍。。。。。

到11:20 啊我拍出来了

搞出数据调调调 啊过了

再测大样例 我日??? 又wa 还是一片

又拍拍拍了20分钟

我去怎么还是这里错 ??? 再改终于过了大样例

啊已经11:40了

看t2 看了10分钟题目看不懂啊???

zhx路过,正好问了一波题目哦原来,是用来分割数字的啊

啊我好像会打20暴力啊??

啊我好像会打链啊???

然后想了一下好像很对啊开始打

这暴力有点难打啊?? 判断起来好麻烦啊

直接打链吧??

我日规则怎么可以加,的????

然后t2就这么爆零了

开题答

我日怎么只有一个小时多一点了啊啊??

看懂题目花了10分钟。。研究那个判断器花了10分钟。。

还有40分钟

我想了一下我好像不太会自己计算它花费时间。。。

就算会可能这点时间也码不出来了吧

爬山用不了了

那就手玩吧。。。

应该这种题最高分也就40吧(事实就是这在扯淡)

手玩了20多分钟第1个点,啊233333333 a了啊???

开始玩第二个点,乱搞了一波拿了4分

然后 好像每个点都有送分啊

离结束还有15分钟

写了个程序随机了一波 然后发现还有10分钟

我随便挑了个点看看

发现随机的有3分啊???

我点开数据一看 我日这他妈不是链么

那dp随便搞啊???

然后 考试就结束了

开始意识到后面的点可能就是傻逼

出来交流了一下发现t3各种爬山最少的也有40。。

凉了凉了

最后70 30 25 100 0 27=252

可能比ag低10-20左右吧

其实拿满很可能就有au吧

100 45(+20)25 100 0 50(+10)

贴一下t1

ctsc2018
#include <bits/stdc++.h>
using namespace std;
#define IL inline
#define rint register int
#define ll unsigned long long
const int N=2e5+1e4;
const int N2=1e5+100;
struct re{
int a,b,c;
}a[N];
int ph[N*20],pt[N*20],root[N],n,m;
ll pnum[N*20],pcost[N*20],g,l;
int cnt;
IL bool cmp(re x,re y)
{
return(x.a<y.a);
}
#define mid ((h+t)>>1)
void insert(rint last,rint &now,rint k,rint h,rint t)
{
now=++cnt;
if (h==t)
{
pcost[now]=a[k].b; pnum[now]=pnum[last]+a[k].c; return;
}
ph[now]=ph[last]; pt[now]=pt[last];
pcost[now]=pcost[last]+1ll*a[k].b*a[k].c;
pnum[now]=pnum[last]+a[k].c;
if (a[k].b<=mid) insert(ph[last],ph[now],k,h,mid);
else insert(pt[last],pt[now],k,mid+1,t);
}
bool query(rint last,rint now,rint h,rint t,ll g,ll l)
{
if (h==t)
{
if (l<=pnum[now]-pnum[last]&&l*pcost[now]<=g) return(1); else return(0);
}
ll tj=pnum[ph[now]]-pnum[ph[last]],hf;
if (mid!=h) hf=pcost[ph[now]]-pcost[ph[last]];
else hf=(pnum[ph[now]]-pnum[ph[last]])*pcost[ph[now]];
if (tj>=l)
return(query(ph[last],ph[now],h,mid,g,l));
else
{
if (g>=hf) return(query(pt[last],pt[now],mid+1,t,g-hf,l-tj));
else return(0);
}
}
IL bool check(rint x)
{
if (query(root[x-1],root[n],1,N2,g,l)) return(1);
else return(0);
}
int main()
{
freopen("juice.in","r",stdin);
freopen("juice.out","w",stdout);
ios::sync_with_stdio(false);
cin>>n>>m;
for (rint i=1;i<=n;i++) cin>>a[i].a>>a[i].b>>a[i].c;
sort(a+1,a+n+1,cmp);
for (rint i=1;i<=n;i++)
insert(root[i-1],root[i],i,1,N2);
for (rint i=1;i<=m;i++)
{
//ll g,l g rmb l sheng
cin>>g>>l;
rint h=1,t=n;
while (h<t)
{
rint mid2=(h+t+1)/2;
if (check(mid2)) h=mid2; else t=mid2-1;
}
if (h==1&&!check(1)) cout<<-1<<endl;
else cout<<a[h].a<<endl;
}
// cout<<cnt<<endl;
return 0;
}
ctsc2018