发现自己思维能力又跟不上了...做题有点吃力...所以回归AGC刷题计划...

AGC040506都写了一部分题然后懒得补全了,所以从07开始做吧。大概是从C开始。

C

这也太人类智慧了吧...

我先是自己画了个柿子 咱也不知道对不对 先丢着

$\frac{1}{i-j+1} * \frac{1}{2^{j-n+1}} * ((2i-2j+1)d_1 + \frac{2i+2j-3}{2i-2j+1} x)$

就是根据每一个球到哪一个洞推的,发现是小数显然用不了 鸽了。

然后就发现了这人类智慧的题解

发现有个性质没用上 就是等差数列 我们接着转换问题

变成数轴上有2n个点 每次可以取走相邻两颗 贡献是它俩之间的距离

惊喜一刻到了:可以发现每次距离期望的变化是等差数列!

等差数列+等差数列依然是等差数列= =

所以我们直接维护首项末项和公差就可以计算了

好像...很人类智慧...

  1. //Love and Freedom.
  2. #include<cstdio>
  3. #include<algorithm>
  4. #include<cstring>
  5. #include<cmath>
  6. #define ll long long
  7. #define inf 20021225
  8. #define db double
  9. using namespace std;
  10. int read()
  11. {
  12. int s=,f=; char ch=getchar();
  13. while(ch<''||ch>''){if(ch=='-') f=-; ch=getchar();}
  14. while(ch>=''&&ch<='') s=s*+ch-'',ch=getchar();
  15. return f*s;
  16. }
  17. int n,x,k;
  18. int main()
  19. {
  20. n=read(); x=read(); k=read();
  21. db bg=x,ed=x+(2.0*n-)*k,ans=0.0;
  22. for(int i=(n<<);i;i-=)
  23. {
  24. ans+=(bg+ed)/2.0;
  25. bg+=(bg*+k*)/(1.0*i);
  26. ed+=(ed*-k*)/(1.0*i);
  27. if(i>) k=(ed-bg)/((i-)*1.0-1.0);
  28. }
  29. printf("%.10lf\n",ans);
  30. return ;
  31. }

C

D

这个题...比C简单多了啊...AGC的题目顺序真是个迷...

写个柿子$f[i]=min(f[i],f[j]+max { T,2*p[i]-p[j+1] } )$

显然有单调性...分类讨论一波max的取值维护一下就行了...

  1. //Love and Freedom.
  2. #include<cstdio>
  3. #include<algorithm>
  4. #include<cstring>
  5. #include<cmath>
  6. #define ll long long
  7. #define inf 20021225
  8. #define N 100100
  9. using namespace std;
  10. int read()
  11. {
  12. int s=,f=; char ch=getchar();
  13. while(ch<''||ch>''){if(ch=='-') f=-; ch=getchar();}
  14. while(ch>=''&&ch<='') s=s*+ch-'',ch=getchar();
  15. return f*s;
  16. }
  17. ll f[N],mn; int t,e,n,p[N];
  18. int main()
  19. {
  20. n=read(),e=read(),t=read();
  21. int l=; mn=1e18;
  22. for(int i=;i<=n;i++) p[i]=read();
  23. for(int i=;i<=n;i++)
  24. {
  25. while(l<=i && *(p[i]-p[l+])>t)
  26. mn=min(mn,f[l]-*p[l+]), l++;
  27. if(l<i) f[i]=f[l]+t;
  28. f[i]=min(f[i],mn+*p[i]);
  29. }
  30. printf("%lld\n",f[n]+e);
  31. return ;
  32. }

D

E

神仙题.jpg

发现答案具有二分性 然后考虑怎么验证

我们用f[x][i][j]表示进x子树为i,出来是j是否可行。发现进去的方式至多只有leaf种,所以这玩意很多都没用,我们考虑把它们单拎出来。

继续考虑如果存在(i,j)(i',j')且满足(i<=i'&&j<=j')的时候,只需要保留(i,j)这样的话我们把一个f[x]的数量级降到了O(n)

考虑如何合并 我们需要对应的枚举(ls,i,j)(rs,k,l)使得(j+k+val[ls]+val[rs]<=mid)得到(x,i+val[ls],l+val[rs]) 由于上面的性质,当i单调增时,j单调降。所以我们直接双指针搞就可以了。

考虑复杂度问题 用Sx表示f[x]的个数 我们发现 Sx=2*min(Sls,Srs)(翻转对应两种)使用启发式合并,我们的复杂度就可以降到O(nlgnlgw)了。

  1. //Love and Freedom.
  2. #include<cstdio>
  3. #include<algorithm>
  4. #include<cstring>
  5. #include<cmath>
  6. #include<vector>
  7. #define ll long long
  8. #define inf 20021225
  9. #define pa pair<ll,ll>
  10. #define mp make_pair
  11. #define fs first
  12. #define se second
  13. #define N 131072
  14. #define pb push_back
  15. #define ls(x) son[x][0]
  16. #define rs(x) son[x][1]
  17. using namespace std;
  18. int read()
  19. {
  20. int s=,f=; char ch=getchar();
  21. while(ch<''||ch>''){if(ch=='-') f=-; ch=getchar();}
  22. while(ch>=''&&ch<='') s=s*+ch-'',ch=getchar();
  23. return f*s;
  24. }
  25. vector<int> son[N+]; int val[N+];
  26. vector<pa> f[N+],tmp[]; ll mid;
  27. void dfs(int x)
  28. {
  29. f[x].clear();
  30. if(!son[x].size()){f[x].pb(mp(,)); return;}
  31. dfs(ls(x)); dfs(rs(x));
  32. for(int p=;p<;p++)
  33. {
  34. tmp[p].clear(); int a=son[x][p],b=son[x][p^]; int r=;
  35. for(int i=;i<f[a].size();i++)
  36. {
  37. while(r+<f[b].size()&&f[b][r+].fs+f[a][i].se+val[a]+val[b]<=mid) r++;
  38. if(r<f[b].size() && f[b][r].fs+f[a][i].se+val[a]+val[b]<=mid) tmp[p].pb(mp(f[a][i].fs+val[a],f[b][r].se+val[b]));
  39. }
  40. }
  41. int i=,j=; ll cur=1e18;
  42. while(i<tmp[].size()&&j<tmp[].size())
  43. {
  44. if(tmp[][i]<tmp[][j])
  45. {
  46. if(tmp[][i].se<cur)
  47. f[x].pb(tmp[][i]),cur=tmp[][i].se;
  48. i++;
  49. }
  50. else
  51. {
  52. if(tmp[][j].se<cur)
  53. f[x].pb(tmp[][j]),cur=tmp[][j].se;
  54. j++;
  55. }
  56. }
  57. while(i<tmp[].size())
  58. {
  59. if(tmp[][i].se<cur)
  60. f[x].pb(tmp[][i]),cur=tmp[][i].se;
  61. i++;
  62. }
  63. while(j<tmp[].size())
  64. {
  65. if(tmp[][j].se<cur)
  66. f[x].pb(tmp[][j]),cur=tmp[][j].se;
  67. j++;
  68. }
  69. }
  70. bool check()
  71. {
  72. dfs();
  73. if(f[].size()) return ;
  74. return ;
  75. }
  76. int main()
  77. {
  78. int n=read(); ll l=,r=;
  79. for(int i=;i<=n;i++)
  80. {
  81. int fa=read(); val[i]=read();
  82. son[fa].pb(i); r+=val[i];
  83. }
  84. ll ans=r;
  85. while(l<=r)
  86. {
  87. mid=l+r>>;
  88. if(check()) ans=mid,r=mid-;
  89. else l=mid+;
  90. }
  91. printf("%lld\n",ans);
  92. return ;
  93. }

E

 

F

为什么他们什么都能想到啊QAQ

建议去看editorial...

大概就是维护拐点信息,感性理解还是可以的...大概自己做是没戏了...

  1. //Love and Freedom.
  2. #include<cstdio>
  3. #include<algorithm>
  4. #include<cstring>
  5. #include<cmath>
  6. #include<queue>
  7. #define ll long long
  8. #define inf 20021225
  9. #define N 1001000
  10. using namespace std;
  11. int read()
  12. {
  13. int s=,f=; char ch=getchar();
  14. while(ch<''||ch>''){if(ch=='-') f=-; ch=getchar();}
  15. while(ch>=''&&ch<='') s=s*+ch-'',ch=getchar();
  16. return f*s;
  17. }
  18. char s[N],t[N]; queue<int> q;
  19. int main()
  20. {
  21. int n=read(),ans=;
  22. scanf("%s",s+);
  23. scanf("%s",t+);
  24. if(strcmp(s+,t+)==) return printf("0\n"),;
  25. int pt=n,ps=n;
  26. while(pt)
  27. {
  28. while(pt && t[pt]==t[pt-]) pt--;
  29. while(ps && (ps>pt||s[ps]!=t[pt])) ps--;
  30. if(!ps) return printf("-1\n"),;
  31. while(!q.empty() && q.front()-q.size()>=pt) q.pop();
  32. if(ps!=pt) q.push(ps);
  33. ans=max(ans,(int)q.size()+);
  34. pt--;
  35. }
  36. printf("%d\n",ans);
  37. return ;
  38. }

F

AGC007题解的更多相关文章

  1. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  2. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  3. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  4. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  5. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  6. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  7. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

  8. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

  9. CF100965C题解..

    求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...

随机推荐

  1. 【C++进阶:atoi()与itoa()】

    两种函数: atoi 把字符串转为整形: itoa 整形转为字符串: https://www.cnblogs.com/bluestorm/p/3168719.html

  2. OpenStack Nova 高性能虚拟机之 CPU 绑定

    目录 文章目录 目录 前文列表 KVM KVM 的功能列表 KVM 工具集 KVM 虚拟机的本质是什么 vCPU 的调度与性能问题 Nova 支持的 vCPU 绑定 vcpu\_pin\_set 配置 ...

  3. shims-vue.d.ts 解析

    TypeScript的文档看起来比较让人匪夷所思 TS是从2012年就开始的项目,那时ES6的模块化还没有成为继定标准,所以今天来看TS中一些名词让人匪夷所思,其实都是历史遗留问题 比如namespa ...

  4. 二:flask-debug模式详解

    debug模式的情况下可以抛出详细异常信息 新建一个脚本并运行 访问 此时是非debug模式,如果运行的时候代码报错了,是不会提示详细错误的,只会报服务器内部错误 开启debug模式,可以查看到详细错 ...

  5. 宝塔面板修改用户名和密码报错:TypeError: cannot concatenate 'str' and 'NoneType' objects

    [root@dapao~]# bt 14 正在执行(14)... ================================================================== ...

  6. Java多线程学习——sleep和yield

    Thread.sleep(); Thread.yield(); 相同点: 让线程暂停运行. 都是静态方法,可以直接调用. 不同点: sleep让线程从运行状态进入阻塞状态,但是不放开手中的资源. yi ...

  7. 吴恩达机器学习(二) 单变量线性回归(Linear Regression with one variable)

    一.模型表示 1.一些术语 如下图,房价预测.训练集给出了房屋面积和价格,下面介绍一些术语: x:输入变量或输入特征(input variable/features). y:输出变量或目标变量(out ...

  8. docker 安装mysql 并将文件挂载到本地

    首先准备好挂载的文件路径 执行mysql创建以及挂载的命令(这里还可以使用-e环境变量来创建新用户MYSQL_USER,MYSQL_PASSWORD) docker run -d -p : --res ...

  9. ubuntu 虚拟机安装

    ubuntu16.04.5 LTS 安装   1.下载ubuntu镜像 打开ubuntu官网镜像地址https://launchpad.net/ubuntu/+cdmirrors 在上面中搜索chin ...

  10. SpringBoot 单元测试junit test

    pom引用 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http: ...