T1 接力比赛

思路就是直接做背包$dp$,然后看看容量相同的相加的最大值。

考虑如何在$dp$过程中进行优化

注意到转移方程的第二维枚举容量没有必要从容量总和开始枚举

那么我们便转移边统计前缀和,从前缀和到当前容量做转移就行

复杂度$???$,可以过

 1 #include<bits/stdc++.h>
2 #define int long long
3 using namespace std;
4 namespace AE86{
5 inline int read(){
6 int x=0,f=1;char ch=getchar();
7 while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
8 while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}return x*f;
9 }inline void write(int x,char opt='\n'){
10 char ch[20];int len=0;if(x<0)x=~x+1,putchar('-');
11 do{ch[len++]=x%10+(1<<5)+(1<<4);x/=10;}while(x);
12 for(register int i=len-1;i>=0;--i)putchar(ch[i]);putchar(opt);}
13 }using namespace AE86;
14 const int NN=1e3+1;
15 int n,m,ans,f[1000005],sm[NN],g[1000005],tot;
16 struct node{int w,v;}p[NN];
17 namespace WSN{
18 inline short main(){
19 freopen("game.in","r",stdin);
20 freopen("game.out","w",stdout);
21 n=read(); m=read();
22 memset(f,-0x3f,sizeof(f));
23 memset(g,-0x3f,sizeof(g));
24 f[0]=g[0]=0;
25 for(int i=1;i<=n;i++)
26 p[i].w=read(),p[i].v=read(),sm[i]=sm[i-1]+p[i].w;
27 tot=max(tot,sm[n]);
28 for(int i=1;i<=n;i++)
29 for(int j=sm[i];j>=p[i].w;j--)
30 f[j]=max(f[j],f[j-p[i].w]+p[i].v);
31 memset(sm,0,sizeof(sm));
32 for(int i=1;i<=m;i++)
33 p[i].w=read(),p[i].v=read(),sm[i]=sm[i-1]+p[i].w;
34 tot=max(tot,sm[m]);
35 for(int i=1;i<=m;i++)
36 for(int j=sm[i];j>=p[i].w;j--)
37 g[j]=max(g[j],g[j-p[i].w]+p[i].v);
38 for(int i=0;i<=tot;i++){
39 ans=max(ans,f[i]+g[i]);
40 } write(ans);
41 return 0;
42 }
43 }
44 signed main(){return WSN::main();}

T2 树上竞技

考场上以为是道数据结构加$dp$套路题,结果是道纯计数

考虑每条边做的贡献,设一条边左边有$s$个点,右边则有$n-s$

那么中心点,也就是所有点都要走到的那个点一定出在 点数多的一侧

也就是这条边会做$min(i,m-i)$次贡献,$i$是左边要选的点的个数。

那么答案可以写成$ans=\sum _{u=2}^{n} \sum_{i=1}^{m-1} C_{siz[u]}^{i} *C_{n-siz[u]}^{m-i}*min(i,m-i)$

考虑把$min$干掉,柿子内部化简为$\sum_{i=1}^{\frac{m-1}{2}} C_{s}^{i} *C_{n-s}^{m-i}*i+C_{n-s}^{i}*C_{s}^{m-i}*i$

当然如果$m$是偶数还要加上特殊的没进行考虑的$C_{s}^{\frac{m}{2}}*C_{n-s}^{\frac{m}{2}}* \frac{m}{2}$

题解柿子错了

然后这样或者不去掉$min$可获得$40$。

偶数的那部分可以直接暴力,我们继续化简$ \sum_{i=1}^{k} C_{s}^{i} *C_{n-s}^{m-i}*i$一部分

设$G[s]=\sum_{i=1}^{k} C_{s}^{i} *C_{n-s}^{m-i}*i=s*\sum_{i=1}^{k} C_{s-1}^{i-1} *C_{n-s}^{m-i}$

那么答案为$ans=\sum_{u=2}^{n}G[siz[u]]+G[n-siz[u]]$

考虑$\frac{G[s]}{s}$的组合含义,从$n-1$个物品中选择$m-1$个物品,至少有$k$个物品在前$s$个物品内的方案

考虑$G$之间的递推性,可以感性理解,画一个数轴自己挪一挪分界点就出来了,$G[s]-G[s+1]=C_{s-1}^{k-1}*C_{n-s-1}^{m-k-1}$

 1 #include<bits/stdc++.h>
2 #define int long long
3 using namespace std;
4 namespace AE86{
5 inline int read(){
6 int x=0,f=1;char ch=getchar();
7 while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
8 while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}return x*f;
9 }inline void write(int x,char opt='\n'){
10 char ch[20];int len=0;if(x<0)x=~x+1,putchar('-');
11 do{ch[len++]=x%10+(1<<5)+(1<<4);x/=10;}while(x);
12 for(register int i=len-1;i>=0;--i)putchar(ch[i]);putchar(opt);}
13 }using namespace AE86;
14 const int NN=1e6+1,mod=1e9+7;
15 int n,m,h[NN],v[NN],ans;
16 int siz[NN],fa[NN],G[NN];
17 struct SNOW{int to,next;}e[NN<<1];int head[NN],rp;
18 inline void add(int x,int y){
19 e[++rp]=(SNOW){y,head[x]};head[x]=rp;
20 e[++rp]=(SNOW){x,head[y]};head[y]=rp;
21 }
22 inline void dfs1(int f,int x){
23 siz[x]=1;
24 for(int i=head[x];i;i=e[i].next){
25 int y=e[i].to ; if(y==f) continue;
26 dfs1(x,y); siz[x]+=siz[y];
27 }
28 }
29 inline int qmo(int a,int b,int ans=1){
30 int c=mod; a%=c;for(;b;b>>=1,a=a*a%c) if(b&1) ans=ans*a%c;
31 return ans;
32 }
33 inline void pre(){
34 h[0]=h[1]=1; v[0]=v[1]=1;
35 for(int i=2;i<NN;++i) h[i]=h[i-1]*i%mod;
36 v[NN-1]=qmo(h[NN-1],mod-2);
37 for(int i=NN-2;i>=2;--i) v[i]=v[i+1]*(i+1)%mod;
38 }
39 inline int C(int n,int m){
40 if(n<m||n<0||m<0) return 0;
41 return h[n]*v[n-m]%mod*v[m]%mod;
42 }
43 namespace WSN{
44 inline short main(){
45 freopen("meeting.in","r",stdin);
46 freopen("meeting.out","w",stdout);
47 n=read();m=read(); pre();
48 for(int i=2;i<=n;++i)
49 fa[i]=read(),add(fa[i],i);
50 dfs1(0,1);
51 if(m%2==0) for(int i=2;i<=n;i++)
52 ans=(ans+C(siz[i],m/2)*C(n-siz[i],m/2)%mod*(m/2)%mod)%mod;
53 int k=(m-1)>>1; if(k) G[1]=C(n-1,m-1);
54 for(int i=1;i<n;i++) G[i+1]=(G[i]-C(i-1,k-1)*C(n-i-1,m-k-1)%mod+mod)%mod;
55 for(int i=1;i<=n;i++) G[i]=G[i]*i%mod;
56 for(int i=2;i<=n;i++)
57 ans=(ans+G[siz[i]]+G[n-siz[i]])%mod;
58 write(ans);
59
60 return 0;
61 }
62 }
63 signed main(){return WSN::main();}

T3 虚构推理

水过的,直接枚举一天的所有时间然后找最大值的最小值即可,跑的比正解快仅有$400ms$

不懂为啥能$zhe$快。

正解是二分,二分出一个角度,$check$的时候找有无区间覆盖,

区间是指每一个输入指针加减验证的角度得出的一段可能值域

那么对于区间的交可以用柯朵莉树

 1 #include<bits/stdc++.h>
2 #define int long long
3 #define wsn double
4 using namespace std;
5 namespace AE86{
6 inline int read(){
7 int x=0,f=1;char ch=getchar();
8 while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
9 while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}return x*f;
10 }inline void write(int x,char opt='\n'){
11 char ch[20];int len=0;if(x<0)x=~x+1,putchar('-');
12 do{ch[len++]=x%10+(1<<5)+(1<<4);x/=10;}while(x);
13 for(register int i=len-1;i>=0;--i)putchar(ch[i]);putchar(opt);}
14 }using namespace AE86;
15 const int NN=50005;
16 int n;
17 wsn a[NN],b[NN],ans=1e9;
18 inline wsn abs(wsn a,wsn b){
19 a=fabs(a-b); return a>180 ? 360-a:a;
20 }
21 inline wsn calc(wsn x,wsn s[]){
22 int i=lower_bound(s+1,s+n+1,x>180?x-180:x+180)-s,j=i-1;
23 if(i>n) i=1; if(j==0) j=n;
24 return max(abs(s[i],x),abs(s[j],x));
25 }
26 namespace WSN{
27 inline short main(){
28 freopen("unreal.in","r",stdin);
29 freopen("unreal.out","w",stdout);
30 n=read();
31 for(int i=1,h,m,s;i<=n;i++){
32 h=read(),m=read(),s=read();
33 b[i]=s*0.1+m*6.0;
34 a[i]=(h%12)*30.0+b[i]/12.0;
35 }
36 sort(a+1,a+n+1); sort(b+1,b+n+1);
37 for(int h=0;h<360;h+=30)
38 for(wsn m=0;m<360;m+=0.01)
39 ans=min(ans,max(calc(h+m/12,a),calc(m,b)));
40 printf("%.10lf\n",ans);
41 return 0;
42 }
43 }
44 signed main(){return WSN::main();}

T4 记忆碎片

咕咕咕

Noip模拟66 2021.10.2的更多相关文章

  1. Noip模拟70 2021.10.6

    T1 暴雨 放在第一道的神仙题,不同的做法,吊人有的都在用线段树维护$set$预处理 我是直接$dp$的,可能代码的复杂度比那种的稍微小一点 设$f[i][j][p][0/1]$表示考虑了前$i$列, ...

  2. Noip模拟69 2021.10.5

    考场拼命$yy$高精度结果没学好$for$循环痛失$50pts$,当场枯死 以后一定打对拍,要不考后会... T1 石子游戏 首先要知道典型的$NIM$博弈,就是说如果所有堆石子个数的异或和为$0$则 ...

  3. Noip模拟76 2021.10.14

    T1 洛希极限 上来一道大数据结构或者单调队列优化$dp$ 真就没分析出来正解复杂度 正解复杂度$O(q+nm)$,但是据说我的复杂度是假的 考虑一个点转移最优情况是从它上面的一个反$L$形转移过来 ...

  4. Noip模拟81 2021.10.20

    T1 语言 比较简单的题,然后就瞎写了,所以考场上就我一个写了线段树的,所以我的常数.... 所以就枚举动词的位置,找前面后面有没有出现$4$即可 1 #include<bits/stdc++. ...

  5. Noip模拟83 2021.10.26

    T1 树上的数 有手就能在衡中$OJ$上过,但是$WaitingCoders$不行,就是这样 必须使用$O(n)$算法加上大力卡常,思路就是找子树内没更新的更新,更新过了直接$return$ 1 #i ...

  6. Noip模拟80 2021.10.18

    预计得分:5 实际得分:140?????????????? T1 邻面合并 我考场上没切掉的大水题....(证明我旁边的cty切掉了,并觉得很水) 然而贪心拿了六十,离谱,成功做到上一篇博客说的有勇气 ...

  7. Noip模拟79 2021.10.17(题目名字一样)

    T1 F 缩点缩成个$DAG$,然后根据每个点的度数计算期望值 1 #include<cstdio> 2 #include<cstring> 3 #include<vec ...

  8. Noip模拟78 2021.10.16

    这次时间分配还是非常合理的,但可惜的是$T4$没开$\textit{long long}$挂了$20$ 但是$Arbiter$上赏了蒟蒻$20$分,就非常不错~~~ T1 F 直接拿暴力水就可以过,数 ...

  9. Noip模拟77 2021.10.15

    T1 最大或 $T1$因为没有开$1ll$右移给炸掉了,调了一年不知道为啥,最后实在不懂了 换成$pow$就过掉了,但是考场上这题耽误了太多时间,后面的题也就没办法好好打了.... 以后一定要注意右移 ...

随机推荐

  1. C# 加载Word的3种方法

    本次经验内容分享通过C#程序来加载Word文档的3种不同方法.分别是: 1. 加载本地Word文档 2. 以只读模式加载Word文档 3. 从流加载Word [程序环境] Windows 10 Vis ...

  2. [第十六篇]——Docker 安装 CentOS之Spring Cloud直播商城 b2b2c电子商务技术总结

    Docker 安装 CentOS CentOS(Community Enterprise Operating System)是 Linux 发行版之一,它是来自于 Red Hat Enterprise ...

  3. Windows phone 8 触发器使用小结

    引用空间: xmlns:ec="clr-namespace:Microsoft.Expression.Interactivity.Core;assembly=Microsoft.Expres ...

  4. composer 包 slim使用案例,一个简单的路由解决方案

    nginx配置文件修改 location / { try_files $uri /index.php$is_args$args; } 设置好nginx伪静态,把所有的请求方式都转向到index.php ...

  5. PHP中命名空间是怎样的存在(一)?

    命名空间其实早在PHP5.3就已经出现了.不过大部分同学可能在各种框架的使用中才会接触到命名空间的内容,当然,现代化的开发也都离不开这些能够快速产出的框架.这次我们不从框架的角度,仅从简单的代码角度来 ...

  6. Jmeter系列(15)- 常用断言之大小断言

    大小断言 大小断言验证响应数据size大小,它的作用范围有主Sample与子Sample:适用场景,判断附件下载的大小,比如项目安装包 完整响应:全部响应信息 响应头:响应头信息,比如http协议的头 ...

  7. cgroup之cpu关键参数

    cpu.cfs_period_us specifies a period of time in microseconds (µs, represented here as "us" ...

  8. 鸿蒙内核源码分析(内存规则篇) | 内存管理到底在管什么 | 百篇博客分析OpenHarmony源码 | v16.02

    百篇博客系列篇.本篇为: v16.xx 鸿蒙内核源码分析(内存规则篇) | 内存管理到底在管什么 | 51.c.h .o 内存管理相关篇为: v11.xx 鸿蒙内核源码分析(内存分配篇) | 内存有哪 ...

  9. YbtOJ#482-爬上山顶【凸壳,链表】

    正题 题目链接:https://www.ybtoj.com.cn/contest/116/problem/2 题目大意 \(n\)个点,\(x\)坐标递增,第\(i\)个点向第\(j\)个点连边. 开 ...

  10. Python爬虫--淘宝“泸州老窖”

    爬虫淘宝--"泸州老窖" 爬去淘宝"泸州老窖" 相关信息: import requests import re import json import panda ...