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. Dart简易教程 (1)---数据类型 运算符,类转换换

    从下面开始学习DART编程 以下是一个简单的示例: main(){ var number = 42; print(number);}程序说明,dart是一个强大的脚本类语言,可以不预先定义变量类型 , ...

  2. HDU 6170 Two strings( DP+字符串匹配)

    http://acm.hdu.edu.cn/showproblem.php?pid=6170 题目大意: 给出两个字符串s1和s2(长度小于等于2500). s1是一个正常的包含大小写字母的字符串,s ...

  3. PTA面向对象程序设计6-3 面积计算器(函数重载)

    实现一个面积计算器,它能够计算矩形或长方体的面积. 函数接口定义: int area(int x, int y); int area(int x, int y, int z); 第一个函数计算长方形的 ...

  4. 解析Markdown文件生成React组件文档

    前言 最近做的项目使用了微前端框架single-spa. 对于这类微前端框架而言,通常有个utility应用,也就是公共应用,里面是各个子应用之间可以共用的一些公共组件或者方法. 对于一个团队而言,项 ...

  5. symfony generate:bundle出现提示: Checking that the bundle is autoloaded

    可以参考官方文档给出来的解决办法 http://symfonychina.com/doc/current/bundles/SensioGeneratorBundle/commands/generate ...

  6. prometheus+grafana实现服务监控

    一.安装prometheus: 下载相应的版本 :https://prometheus.io/download/ 解压: Linux:tar -zxvf XXX.tar.gz windows:直接下载 ...

  7. 关于Python中的深浅拷贝

    之前一直认为浅拷贝是拷贝内容的第一层,但是不开辟内存,只是增加新的指向原来的内容:深拷贝是拷贝是拷贝每一层并开辟内存. 其实这个是不严谨的不正确的. 从以上可以看出,浅拷贝中当时可变类型的时候,内存是 ...

  8. Windows命令行在任意位置启动和退出nginx

    写在前面 本文给出Windows系统中能在任意路径下通过命令行启动和退出nginx的方法.不想看过程的读者可以直接跳转到结论,一样能解决问题. 正文 过程 很多Windows下的nginx教程都教我们 ...

  9. P5305-[GXOI/GZOI2019]旧词【树链剖分,线段树】

    正题 题目链接:https://www.luogu.com.cn/problem/P5305 题目大意 给一棵有根树和\(k\),\(Q\)次询问给出\(x,y\)求 \[\sum_{i=1}^{x} ...

  10. 常见JS

    1.获取当前月份第一天 var date = new Date(); var year = date.getFullYear(); var month = date.getMonth() + 1; v ...