不是拆广州塔

Day -inf

四套NOI模拟降智

Day0

拆了一发新新

本来想复习小圆脸结果拆了3h最后还没带任意门

没有帘子可还行

第一天由于没发现被子可以抽出来就没睡好

Day1

8:30开考,0.5h看题+切T1

1h切T2(主席树0.9s很虚)

以为能切T3,想了个很假的方法调了2h

T3SCP?

最后5min10分暴力

然而水法 并 非 全 部 木 大

T3正解:

枚举每个数最终到哪个点上,因为直接判边与边的关系不好搞,所以用链表维护每个点相连的边之间的关系

关系有三种:第一条,两条边相邻,最后一条

再建两个点表示头和尾,枚举时判断是否合法即可

因为剩下无限制的边随便放必定合法

code(洛谷数据):

#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#define fo(a,b,c) for (a=b; a<=c; a++)
#define fd(a,b,c) for (a=b; a>=c; a--)
#define min(a,b) (a<b?a:b)
using namespace std; int a[4002][2];
int ls[2001];
int b[2001];
int pre[2001][2002];
int nxt[2001][2002];
int ans[2001];
int d[2001];
int d1[2001];
int d2[2001];
int T,n,i,j,k,l,len,mn,tot;
bool bz; void New(int x,int y)
{
++len;
a[len][0]=y;
a[len][1]=ls[x];
ls[x]=len;
} void dfs(int Fa,int Ls,int t)
{
int id,i,j,k,l; if (t==2 && Fa==0)
n=n; if (Ls && nxt[t][Ls]==Ls && pre[t][n+1]==n+1 && (pre[t][Ls]!=0 || d[t]==1))
mn=min(mn,t); for (i=ls[t]; i; i=a[i][1])
if (a[i][0]!=Fa)
{
if (t==3)
n=n; id=i/2; if (!Ls && pre[t][id]==id && nxt[t][0]==0 && (nxt[t][id]!=n+1 || d[t]==1) || Ls && pre[t][Ls]!=id && nxt[t][Ls]==Ls && pre[t][id]==id && (pre[t][Ls]!=0 || nxt[t][id]!=n+1 || d[t]==1))
dfs(t,id,a[i][0]);
}
} void Dfs(int Fa,int t)
{
int i; if (t==mn)
{
bz=1;
return;
} for (i=ls[t]; i; i=a[i][1])
if (a[i][0]!=Fa)
{
++tot;
d1[tot]=a[i][0];
d2[tot]=i/2; Dfs(t,a[i][0]); if (bz)
return; --tot;
}
} int main()
{
// freopen("testdata1.in","r",stdin);
// freopen("d1t3.in","r",stdin); scanf("%d",&T);
for (;T;--T)
{
memset(ls,0,sizeof(ls));
len=1; scanf("%d",&n);
fo(i,1,n)
scanf("%d",&b[i]),++d[i];
fo(i,2,n)
{
scanf("%d%d",&j,&k); New(j,k);
New(k,j); ++d[j];
++d[k];
} fo(i,1,n)
{
fo(j,0,n+1)
pre[i][j]=nxt[i][j]=j;
} fo(i,1,n)
{
bz=tot=0;
mn=n+1; dfs(0,0,b[i]);
Dfs(0,b[i]); nxt[b[i]][0]=d2[1];
pre[b[i]][nxt[b[i]][d2[1]]]=0; if (nxt[b[i]][d2[1]]!=d2[1])
pre[b[i]][d2[1]]=nxt[b[i]][d2[1]]=-1; --d[b[i]]; fo(j,1,tot-1)
{
k=pre[d1[j]][d2[j]];
l=nxt[d1[j]][d2[j+1]]; nxt[d1[j]][k]=l;
pre[d1[j]][l]=k; if (pre[d1[j]][d2[j]]!=d2[j])
nxt[d1[j]][d2[j]]=pre[d1[j]][d2[j]]=-1;
if (nxt[d1[j]][d2[j+1]]!=d2[j+1])
nxt[d1[j]][d2[j+1]]=pre[d1[j]][d2[j+1]]=-1; --d[d1[j]];
} pre[d1[tot]][n+1]=d2[tot];
nxt[d1[tot]][pre[d1[tot]][d2[tot]]]=n+1; if (pre[d1[tot]][d2[tot]]!=d2[tot])
pre[d1[tot]][d2[tot]]=nxt[d1[tot]][d2[tot]]=-1; --d[d1[tot]]; ans[i]=mn;
} fo(i,1,n)
printf("%d ",ans[i]);
printf("\n");
}
}

晚上又拆了一发新新

Day2

8:30看题,想了0.5h想到T184分,之后一直在想100分

9:30时打了84分,然后又想了0.5h优化想不出

10:00想T2,瞎猜结论从后往前贪心选最右且合法的

打了一发n^2过了样例,然后写了单调栈的O(n)

然后高精度打错了并且没有把type=0分开

期望(?)80

11:00想T3,写了55分

菊花图来不及想了

T2代码(洛谷数据):

#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#define fo(a,b,c) for (a=b; a<=c; a++)
#define fd(a,b,c) for (a=b; a>=c; a--)
using namespace std; struct Type{
long long a[4];
} ans,b,c;
long long a[40000001];
long long f[40000001];
int d[40000001];
int P[100001];
int L[100001];
int R[100001];
int n,type,i,j,k,l,h,t;
long long ans1,ans2,s,s1,s2,x,y,z,m;
bool bz; int main()
{
// freopen("testdata3.in","r",stdin);
// freopen("d2t2.in","r",stdin); scanf("%d%d",&n,&type);
if (!type)
{
fo(i,1,n)
scanf("%lld",&a[i]),a[i]+=a[i-1];
}
else
{
scanf("%lld%lld%lld%lld%lld%lld",&x,&y,&z,&a[1],&a[2],&m);
fo(i,1,m)
scanf("%d%d%d",&P[i],&L[i],&R[i]); fo(i,3,n)
a[i]=(x*a[i-1]+y*a[i-2]+z)%1073741824; fo(i,1,m)
{
fo(j,P[i-1]+1,P[i])
a[j]=a[j]%(R[i]-L[i]+1)+L[i];
} fo(i,1,n)
a[i]+=a[i-1];
} h=t=1;
d[1]=0;
fo(i,1,n)
{
while (h<t && f[d[h+1]]+a[d[h+1]]<=a[i])
++h; f[i]=a[i]-a[d[h]];
while (h<=t && f[d[t]]+a[d[t]]>=f[i]+a[i])
--t; d[++t]=i;
} l=n;
fd(i,n,1)
if (f[i-1]<=a[l]-a[i-1])
{
s=a[l]-a[i-1];
fo(j,0,3)
{
b.a[j]=s%100000000;
s/=100000000; c.a[j]=0;
}
fo(j,0,3)
{
fo(k,0,j)
c.a[j]+=b.a[k]*b.a[j-k]; if (j<3)
{
c.a[j+1]+=c.a[j]/100000000;
c.a[j]%=100000000;
}
} fo(j,0,3)
{
ans.a[j]+=c.a[j];
if (j<3)
{
ans.a[j+1]+=ans.a[j]/100000000;
ans.a[j]%=100000000;
}
} l=i-1;
} bz=0;
fd(i,3,0)
if (ans.a[i])
{
if (bz)
{
j=ans.a[i];
fo(k,1,8)
{
if (!j)
printf("0");
j/=10;
}
}
else
bz=1; printf("%lld",ans.a[i]);
}
printf("\n");
}

车上拆了半发新新

后记

成绩出了再补

教训:

想到可能是正解的东西要谨慎考虑(正确性&时间),一定要打先部分分

要把有把握能过的点特判出来,避免被其它不确定算法影响

暴力打满不打挂就有500了(

*程序一定要分段,就算是水法也要交上去但要注意分段的范围

多刷题,提升手速+智商

-11.20

突然发现D1T3应该可以过链?

-12.1

UOJ测试D2T288分?

实际上是后面三个点T了

好像在牛客也T了

CCF少爷机吼啊

-12.2

妙啊

D2T2只挂了4分,D1T3链过了,D1T2主席树没被卡

100+100+10+84+80+55=429-->100+100+35+84+96+55=470

CCF牛逼!(正论)

CSP-S2019游记&拆塔记的更多相关文章

  1. CSP 2019游记 & 退役记

    扶苏让我记录他AK CSP 的事实 ZAY NB!!! "你不配" 两年半的旅行结束了,我背着满满的行囊下了车,望着毫不犹豫远去的列车,我笑着哭了,笑着翻着我的行囊-- 游记 Da ...

  2. NOIP2018游记 & 退役记

    NOIP2018游记 & 退役记 我是一名来自湖北武汉华中师大一附中的高二\(OIer\),学习\(OI\)一年,今年去参加\(NOIP\),然后退役.这是一篇\(NOIP2018\)的游记, ...

  3. CSP-J&S2019前颓废记

    说了是颓废记,就是颓废记,因为真的很颓废...... 2018年12月 我看懂了<啊哈算法>(仅仅是看懂,并没有完全学会,只看得懂,却不会敲) 插曲:八上期末考试 我们老师阻挠我继续学OI ...

  4. CSP 2019 游记

    Day -32 开坑. 没什么好说的,等个 5 天等初赛(应该叫第一轮认证)挂掉之后就能弃坑了. 今天开始停课,虽然每天只停半天,但是感觉还是特别的舒服~ 然而得等初赛过了才能全天停课-- 没关系,熬 ...

  5. NOIP2018游记(退役记。)

    Noip2018游记 这可能是写的最后一篇博客? \(Day0\) 早上六点从学校出发? 早上有雾,在车上扯淡,睡觉. 莫名其妙到了中午,想着午饭怎么解决,后来才知道早上发的四个面包竟然就包括我的午饭 ...

  6. 游记&退役记

    划水两天. 给61级和62级都讲过课了,圆了一个梦吧. 62级好好学,61级更是. 老人进养老院了,小孩子也该从幼稚园出来了. 祝广一所有OIER,前程似锦,实力++,rp++. 奶一口zbq:NOI ...

  7. 第十八次CSP认证游记 | 2019.12.15

    CSP认证的考试是Haogod介绍的,取得一定成绩之后能有机会参加CCSP的分赛区和全国决赛.这次来参加认证要感谢老师的奔走为我们申请学校的报销,虽然最终因为这不是比赛所以报名费和差旅费下不来,但是老 ...

  8. 2020 CSP&NOIP 游记

    CSP初赛 CSP初赛 Day -1 早上打了模拟赛,T2寒假正好做过,然而还是还是被踩Orz,郑外NB!.中午出校吃了大盘鸡和拉面,还带回来了三瓶可乐. 初赛知识点看了两页不(看)想(不)看(懂)了 ...

  9. CSP/S 2020 退役记

    上一次的AFO记 上上次的AFO记 Day -INF 一条咸鱼的垂死挣扎. RP+=INF Day 0 出发辣. 早上来到机房,带上了准备的面包和泡面....然而后来嫌太占地方就没拿...草了. 而且 ...

随机推荐

  1. python学习之内存驻留机制简述

    第四章 4.1 小数据池 4.1.1 代码块 一个模块,一个函数,一个类,甚至一个command命名都可以称之为一个代码块. 官方解释: A Python program is constructed ...

  2. C++ 11的右值引用

    目录 一.问题导入 二.右值和右值引用 2.1 左值(lvalue)和右值(rvalue) 2.2 左值引用和右值引用 总结 参考资料 C++11 引入了 std::move 语义.右值引用.移动构造 ...

  3. 微信小程序开发(一)----- 基础知识

    1.什么是微信小程序 概念:小程序是一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦想,用户扫一扫或者搜一下即可打开应用,体现了“用完即走”的理念,用户不需要关心是否安装太多应用的问题, ...

  4. python 并发编程 协程 greenlet模块

    一 greenlet模块 不敢是yield,还是greenlet都没有实现检测io,实现遇到io切换效果 如果我们在单个线程内有20个任务,要想实现在多个任务之间切换,使用yield生成器的方式过于麻 ...

  5. HDU 1176 免费馅饼 (动态规划、另类数塔)

    免费馅饼 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  6. [转帖]C#中字典集合HashTable、Dictionary、ConcurrentDictionary三者区别

    C#中字典集合HashTable.Dictionary.ConcurrentDictionary三者区别 https://blog.csdn.net/yinghuolsx/article/detail ...

  7. HTTP协议的概念作用和特点

    Web交互的基本流程 请求:客户端根据服务器地址把数据发送给服务器的过程叫请求. 相应:服务器将请求的处理结果发送给浏览器的过程叫响应. 什么是HTTP? 概念:超文本传输协议. HTTP有什么作用? ...

  8. centos7搭建单机redis5.0

    目录 1. redis初步安装 2. 配置 3. 设置开机启动(centos6) 3.1 编写启动脚本 3.2 设置权限 3.3 启动测试 3.4 设置开机自启动 4. 设置开机启动(centos7) ...

  9. JAVA并发编程实战笔记 第二章

    2.1 线程安全性 当多个线程访问某个类时,不论这些线程如何交替执行,这个类始终都能表现出正确的行为,且主调代码中不需要任何额外的同步或协同,则称这个类是线程安全的. 类不变性条件(Invariant ...

  10. for XML path 使用技巧

    FOR XML PATH 是sqlserver数据库的语法,能将查询出的数据转换成xml格式的数据. 首先,我们来看一个正常的查询: SELECT TOP 2 id, name,crDate FROM ...