可以在UOJ上提交可以在bzoj上提交(权限)

A. Bali Sculptures

对于前72%的数据,按位考虑,然后跑一点沙茶dp就行了。

dp:用f[x][y]表示前x位分为y段是否满足条件。

对于最后29%的数据,我们改一下dp方程。

dp:用f[x]表示前x位满足条件至少要分几段。

结论:傻逼题

  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <algorithm>
  5. #include <string.h>
  6. #include <vector>
  7. #include <math.h>
  8. #include <limits>
  9. #include <set>
  10. #include <map>
  11. using namespace std;
  12. #define SZ 2066
  13. typedef long long ll;
  14. int n,a,b,yy[SZ];
  15. #define S 50
  16. ll inn=0,sum[SZ];
  17. bool dp2[SZ][SZ];
  18. bool chk2()
  19. {
  20. for(int i=0;i<=n;i++)
  21. for(int j=0;j<=n;j++) dp2[i][j]=0;
  22. dp2[0][0]=1;
  23. for(int i=0;i<n;i++) //分i段
  24. {
  25. for(int j=0;j<n;j++)
  26. {
  27. if(!dp2[i][j]) continue;
  28. for(int k=j+1;k<=n;k++)
  29. {
  30. if(((sum[k]-sum[j])|inn)==inn) dp2[i+1][k]=1;
  31. }
  32. }
  33. }
  34. for(int i=a;i<=b;i++) if(dp2[i][n]) return 1;
  35. return 0;
  36. }
  37. int dp1[SZ];
  38. const int inf=1000000000;
  39. bool chk1()
  40. {
  41. dp1[0]=0;
  42. for(int i=1;i<=n;i++) dp1[i]=inf;
  43. for(int j=0;j<n;j++)
  44. {
  45. if(dp1[j]==inf) continue;
  46. for(int k=j+1;k<=n;k++)
  47. {
  48. if(((sum[k]-sum[j])|inn)==inn) dp1[k]=min(dp1[k],dp1[j]+1);
  49. }
  50. }
  51. return dp1[n]<=b;
  52. }
  53. int main()
  54. {
  55. scanf("%d%d%d",&n,&a,&b);
  56. for(int i=1;i<=n;i++) scanf("%d",yy+i), sum[i]=sum[i-1]+yy[i];
  57. inn=(1LL<<S)-1;
  58. for(int i=S;i>=1;i--)
  59. {
  60. inn^=1LL<<(i-1);
  61. if(!((a==1)?chk1():chk2())) inn^=1LL<<(i-1);
  62. }
  63. printf("%lld\n",inn);
  64. }

B. Jakarta Skyscrapers

据说可以卡时过?然而UOJ有hack啊根本过不了

等知道正解了再来补

C. Palembang Bridges

一座桥的时候,容易发现要建在中位数的地方。

两座桥的时候,按照每个人的家和办公室位置和排序后,一定存在一个分割点使得前缀都走左边的桥,后缀都走右边的桥,这似乎挺显然的。

然后离散完随手树状数组+二分维护一下中位数啥的即可。

  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <algorithm>
  5. #include <string.h>
  6. #include <vector>
  7. #include <math.h>
  8. #include <limits>
  9. #include <set>
  10. #include <map>
  11. using namespace std;
  12. #define SZ 666666
  13. typedef long long ll;
  14. int K,n,as[SZ],bs[SZ],ap[SZ];
  15. ll ans=0;
  16. int Abs(int x) {return (x>=0)?x:-x;}
  17. ll a_1()
  18. {
  19. ll aa=0; int nn=0;
  20. for(int i=1;i<=n;i++) ap[++nn]=as[i];
  21. for(int i=1;i<=n;i++) ap[++nn]=bs[i];
  22. sort(ap+1,ap+1+nn);
  23. int md=ap[(nn+1)>>1];
  24. for(int i=1;i<=nn;i++) aa+=Abs(ap[i]-md);
  25. return aa;
  26. }
  27. typedef pair<int,int> pii;
  28. pii zs[SZ];
  29. bool cmp(pii a,pii b) {return a.first+a.second<b.first+b.second;}
  30. #define SN 233333
  31. struct Bits
  32. {
  33. ll bits[SZ];
  34. ll sum(int x)
  35. {
  36. ll ans=0;
  37. for(;x>=1;x-=x&-x) ans+=bits[x];
  38. return ans;
  39. }
  40. ll sum(int l,int r) {return sum(r)-sum(l-1);}
  41. void edit(int x,ll y)
  42. {
  43. for(;x<=SN;x+=x&-x) bits[x]+=y;
  44. }
  45. void clr() {for(int i=1;i<=SN;i++) bits[i]=0;}
  46. }B1,B2;
  47. ll zd[SZ],fd[SZ];
  48. #define ls(x) (lower_bound(ap+1,ap+1+nn,x)-ap)
  49. ll a_2()
  50. {
  51. ll aa=20000000000000000LL; int nn=0;
  52. for(int i=1;i<=n;i++) ap[++nn]=as[i];
  53. for(int i=1;i<=n;i++) ap[++nn]=bs[i];
  54. sort(ap+1,ap+1+nn);
  55. nn=unique(ap+1,ap+1+nn)-ap-1;
  56. for(int i=1;i<=n;i++) zs[i].first=as[i], zs[i].second=bs[i];
  57. sort(zs+1,zs+1+n,cmp);
  58. B1.clr(); B2.clr();
  59. for(int i=1;i<=n;i++)
  60. {
  61. int A=ls(zs[i].first),B=ls(zs[i].second);
  62. B1.edit(A,1);
  63. B2.edit(A,zs[i].first);
  64. B1.edit(B,1);
  65. B2.edit(B,zs[i].second);
  66. int l=0,r=nn;
  67. while(l<r)
  68. {
  69. int mid=(l+r)>>1;
  70. int s=B1.sum(mid);
  71. if(s<i) l=mid+1; else r=mid;
  72. }
  73. int mn=ap[l];
  74. ll cans=B1.sum(l)*mn-B2.sum(l)+B2.sum(l,nn)-B1.sum(l,nn)*mn;
  75. zd[i]=cans;
  76. }
  77. B1.clr(); B2.clr();
  78. for(int i=n;i>=1;i--)
  79. {
  80. int A=ls(zs[i].first),B=ls(zs[i].second);
  81. B1.edit(A,1);
  82. B2.edit(A,zs[i].first);
  83. B1.edit(B,1);
  84. B2.edit(B,zs[i].second);
  85. int l=0,r=nn;
  86. while(l<r)
  87. {
  88. int mid=l+r>>1;
  89. int s=B1.sum(mid);
  90. if(s<n+1-i) l=mid+1; else r=mid;
  91. }
  92. int mn=ap[l];
  93. ll cans=B1.sum(l)*mn-B2.sum(l)+B2.sum(l,nn)-B1.sum(l,nn)*mn;
  94. fd[i]=cans;
  95. }
  96. for(int i=1;i<=n+1;i++) aa=min(aa,zd[i-1]+fd[i]);
  97. return aa;
  98. }
  99. int main()
  100. {
  101. int N; scanf("%d%d",&K,&N);
  102. for(int i=1;i<=N;i++)
  103. {
  104. char a[3],c[3]; int b,d;
  105. scanf("%s%d%s%d",a,&b,c,&d);
  106. if(a[0]==c[0])
  107. {
  108. ans+=Abs(b-d);
  109. continue;
  110. }
  111. ++n; as[n]=b; bs[n]=d;
  112. }
  113. if(K==1) printf("%lld\n",a_1()+ans+n);
  114. else printf("%lld\n",a_2()+ans+n);
  115. }

APIO2015泛做的更多相关文章

  1. codeforces泛做..

    前面说点什么.. 为了完成日常积累,傻逼呵呵的我决定来一发codeforces 挑水题 泛做.. 嗯对,就是泛做.. 主要就是把codeforces Div.1的ABCD都尝试一下吧0.0.. 挖坑0 ...

  2. 学记笔记 $\times$ 巩固 · 期望泛做$Junior$

    最近泛做了期望的相关题目,大概\(Luogu\)上提供的比较简单的题都做了吧\(233\) 好吧其实是好几天之前做的了,不过因为太颓废一直没有整理-- \(Task1\) 期望的定义 在概率论和统计学 ...

  3. 历年NOIP水题泛做

    快noip了就乱做一下历年的noip题目咯.. noip2014 飞扬的小鸟 其实这道题并不是很难,但是就有点难搞 听说男神错了一个小时.. 就是$f_{i,j}$表示在第$i$个位置高度为$j$的时 ...

  4. HAOI2015 泛做

    T1 有一棵点数为N的树,树边有边权.给你一个在0~N之内的正整数K,你要在这棵树中选择K个点,将其染成黑色,并将其他的N-K个点染成白色.将所有点染色后,你会获得黑点两两之间的距离加上白点两两之间的 ...

  5. LCT裸题泛做

    ①洞穴勘测 bzoj2049 题意:由若干个操作,每次加入/删除两点间的一条边,询问某两点是否连通.保证任意时刻图都是一个森林.(两点之间至多只有一条路径) 这就是个link+cut+find roo ...

  6. 基尔霍夫矩阵题目泛做(AD第二轮)

    题目1: SPOJ 2832 题目大意: 求一个矩阵行列式模一个数P后的值.p不一定是质数. 算法讨论: 因为有除法而且p不一定是质数,不一定有逆元,所以我们用辗转相除法. #include < ...

  7. 后缀自动机/回文自动机/AC自动机/序列自动机----各种自动机(自冻鸡) 题目泛做

    题目1 BZOJ 3676 APIO2014 回文串 算法讨论: cnt表示回文自动机上每个结点回文串出现的次数.这是回文自动机的定义考查题. #include <cstdlib> #in ...

  8. FFT与多项式、生成函数题目泛做

    题目1 COGS 很强的乘法问题 高精度乘法用FFT加速 #include <cstdlib> #include <iostream> #include <algorit ...

  9. 二维计算几何基础题目泛做(SYX第一轮)

    题目1: POJ 2318 TOYS 题目大意: 给一个有n个挡板的盒子,从左到右空格编号为0...n.有好多玩具,问每个玩具在哪个空格里面. 算法讨论: 直接叉积判断就可以.注意在盒子的边界上面也算 ...

随机推荐

  1. 【代码笔记】iOS-首页3张图片变化

    一,效果图. 二,工程图. 三,代码. RootViewController.h #import <UIKit/UIKit.h> @interface RootViewController ...

  2. 【Android】不使用WebView来执行Javascript脚本(Rhino)

    前言 动态执行脚本能有效的降低重要功能硬编码带来的问题,尤其是依赖于第三方的应用,可以通过动态脚本+在线参数(例如友盟在线参数)再不更新应用的情况下升级功能. 声明 欢迎转载,但请保留文章原始出处:) ...

  3. 手把手教你使用Git

    一:Git是什么? Git是目前世界上最先进的分布式版本控制系统. 二:SVN与Git的最主要的区别? SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以 ...

  4. Biee 11g权限详解

    前言:BIEE11g的权限较之前10g版本有了较大的变化,最明显的地方就是构架上的变化,其与 Oracle Fusion Middleware Security 紧密的集成在了一起. 在开始之前先让我 ...

  5. SQL Server 2012实施与管理实战指南(笔记)——Ch5启动SQL Server服务和数据库

    5.启动SQL Server服务和数据库 在数据库和服务启动过程中,经常会出现的问题: 1.SQL Server实例无法正常启动 2.系统数据库无法正常启动 3.网络配置失败 4.用户数据库无法启动 ...

  6. Java Security:公钥私钥、数字签名、消息摘要是什么

    1. 鲍勃有两把钥匙,一把是公钥,另一把是私钥. 2. 鲍勃把公钥送给他的朋友们----帕蒂.道格.苏珊----每人一把. 3. 苏珊要给鲍勃写一封保密的信.她写完后用鲍勃的公钥加密,就可以达到保密的 ...

  7. Java Se : Java NIO(服务端)与BIO(客户端)通信

    Java目前有三种IO相关的API了,下面简单的说一下: BIO,阻塞IO,最常用的Java IO API,提供一般的流的读写功能.相信学习Java的人,都用过. NIO,非阻塞IO,在JDK1.4中 ...

  8. TSQL--临时表和表变量

    1. 临时表适用数据量较大的情况,因为临时表可以建立索引 2. 表变量适用于数据较小的情况,表变量只能在定义时创建约束(PRIMARY KEY/UNIQUE)从而间接建立索引 3. 临时表是事务性的, ...

  9. CentOS 6.2编译安装Nginx1.2.0+MySQL5.5.25+PHP5.3.13

    CentOS 6.2编译安装Nginx1.2.0+MySQL5.5.25+PHP5.3.132013-10-24 15:31:12标签:服务器 防火墙 file 配置文件 written 一.配置好I ...

  10. 浅谈游标选项 Static|Keyset|DYNAMIC|FAST_FORWARD

    接好久之前太监的一篇Blog.现在补充几个选项的介绍 所用的语句都是这个 IF OBJECT_ID('T1') IS NOT NULL DROP TABLE T1 GO CREATE TABLE T1 ...