期望得分:100+100+60=260

实际得分:100+85+0=185

二分最后一条相交线段的位置

  1. #include<cstdio>
  2. #include<iostream>
  3. #include<algorithm>
  4.  
  5. using namespace std;
  6.  
  7. #define N 100001
  8.  
  9. int x[N],y[N];
  10. struct node
  11. {
  12. int b;
  13. double k;
  14. }Point[N];
  15.  
  16. void read(int &x)
  17. {
  18. x=; char c=getchar();
  19. while(!isdigit(c)) c=getchar();
  20. while(isdigit(c)) { x=x*+c-''; c=getchar(); }
  21. }
  22.  
  23. int main()
  24. {
  25. freopen("geometry.in","r",stdin);
  26. freopen("geometry.out","w",stdout);
  27. int n; read(n);
  28. for(int i=;i<=n;++i) read(x[i]);
  29. for(int i=;i<=n;++i) read(y[i]);
  30. sort(x+,x+n+);
  31. sort(y+,y+n+);
  32. for(int i=;i<=n;i++)
  33. {
  34. Point[i].b=y[i];
  35. Point[i].k=-y[i]*1.0/x[i];
  36. }
  37. int m; read(m);
  38. int a,b; double g;
  39. int l,r,mid,ans;
  40. while(m--)
  41. {
  42. read(a); read(b);
  43. g=1.0*b/a;
  44. l=;r=n; ans=;
  45. while(l<=r)
  46. {
  47. mid=l+r>>;
  48. if(Point[mid].b/(g-Point[mid].k)<=a) ans=mid,l=mid+;
  49. else r=mid-;
  50. }
  51. printf("%d\n",ans);
  52. }
  53. }

差分约束

设s[i]表示前i个时刻实际招的人数

那么可得约束条件:

a[i]<=s[i]-s[i-7]<=b[i]  i>=7

a[i]<=s[i]+s[23]-s[16+i]<=b[i]  i<7

0<=s[i]-s[i-1]<=b[i]

第二个式子中含有3个未知数

只有两个与i有关

设s[23]=T

那么枚举T,判断当前情况是否有解即可

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<queue>
  4.  
  5. #define N 25
  6.  
  7. using namespace std;
  8.  
  9. int a[N],b[N];
  10.  
  11. int front[N],nxt[],to[],tot,val[];
  12.  
  13. int d[N];
  14. bool vis[N];
  15.  
  16. void add(int u,int v,int w)
  17. {
  18. to[++tot]=v; nxt[tot]=front[u]; front[u]=tot; val[tot]=w;
  19. }
  20.  
  21. bool spfa()
  22. {
  23. queue<int>q;
  24. memset(vis,false,sizeof(vis));
  25. memset(d,-,sizeof(d));
  26. d[]=; vis[]=true;
  27. q.push();
  28. int now;
  29. while(!q.empty())
  30. {
  31. now=q.front(); q.pop(); vis[now]=false;
  32.  
  33. for(int i=front[now];i;i=nxt[i])
  34. if(d[to[i]]<d[now]+val[i])
  35. {
  36. d[to[i]]=d[now]+val[i];
  37. if(d[to[i]]>) return false;
  38. if(!vis[to[i]]) vis[to[i]]=true,q.push(to[i]);
  39. }
  40. }
  41. return true;
  42. }
  43.  
  44. bool solve(int t)
  45. {
  46. memset(front,,sizeof(front)); tot=;
  47. for(int i=;i<;i++)
  48. {
  49. add(i-,i+,a[i]);
  50. // printf("%d %d %d\n",i-7,i+1,a[i]);
  51. }
  52. for(int i=;i<=;i++)
  53. {
  54. // printf("%d %d %d\n",i+17,i+1,a[i]-t);
  55. add(i+,i+,a[i]-t);
  56. }
  57. for(int i=;i<;i++)
  58. {
  59. // printf("%d %d\n",i,i+1);
  60. add(i,i+,);
  61. }
  62. for(int i=;i<;i++)
  63. {
  64. // printf("%d %d %d\n",i+1,i,-b[i]);
  65. add(i+,i,-b[i]);
  66. }
  67. add(,,t); add(,,-t);
  68. return spfa();
  69. }
  70.  
  71. int main()
  72. {
  73. freopen("cashier.in","r",stdin);
  74. freopen("cashier.out","w",stdout);
  75. int T,ans;
  76. scanf("%d",&T);
  77. while(T--)
  78. {
  79. for(int i=;i<;i++) scanf("%d",&a[i]);
  80. for(int i=;i<;i++) scanf("%d",&b[i]);
  81. ans=;
  82. while()
  83. {
  84. if(++ans>) { ans=-; break; }
  85. if(solve(ans)) break;
  86. }
  87. printf("%d\n",ans);
  88. }
  89. }

考场85分贪心

枚举时刻i,作为首先招人满足的时刻

从 它即它往前7个点, 招人,招的人时刻尽可能的靠后

满足它之后,枚举j 到 i-1 再 同样的方法招人

此贪心成立的前提是,存在一个时刻招的人=min(a[i],b[i])

但最优解可能不是这样

假设前面招了x1、x2、x3……个人

最后面招了y个人

这个y会覆盖前面的x1、x2、x3……

  1. #include<cstdio>
  2. #include<algorithm>
  3. using namespace std;
  4. int need[],have[];
  5. int now[],rest[];
  6. int main()
  7. {
  8. freopen("cashier.in","r",stdin);
  9. freopen("cashier.out","w",stdout);
  10. int T;
  11. scanf("%d",&T);
  12. int ans;
  13. while(T--)
  14. {
  15. ans=1e9;
  16. for(int i=;i<;i++) scanf("%d",&need[i]);
  17. for(int i=;i<;i++) scanf("%d",&have[i]);
  18. for(int k=;k<;k++)
  19. {
  20. if(!need[k]) continue;
  21. for(int i=;i<;i++) rest[i]=have[i],now[i]=need[i];
  22. int j=k,cnt=,sum=;
  23. while(now[k] && cnt<)
  24. {
  25. if(j==-) j=;
  26. cnt++;
  27. if(rest[j]<now[k])
  28. {
  29. for(int h=;h<;h++) now[(h+j)%]-=rest[j];
  30. sum+=rest[j];rest[j]=;
  31. }
  32. else
  33. {
  34. int cut=now[k];
  35. for(int h=;h<;h++) now[(h+j)%]-=cut;
  36. rest[j]-=cut;sum+=cut;
  37. }
  38. j--;
  39. }
  40. if(now[k]) continue;
  41. bool f=true;
  42. for(int i=k+,t=;t<=;t++,i++)
  43. {
  44. if(i==) i=;
  45. if(now[i]<=) continue;
  46. j=i; cnt=;
  47. while(now[i] && cnt<)
  48. {
  49. if(j==-) j=;
  50. cnt++;
  51. if(rest[j]<now[i])
  52. {
  53. for(int h=;h<;h++) now[(h+j)%]-=rest[j];
  54. sum+=rest[j];rest[j]=;
  55. }
  56. else
  57. {
  58. int cut=now[i];
  59. for(int h=;h<;h++) now[(h+j)%]-=cut;
  60. rest[j]-=cut,sum+=cut;
  61.  
  62. }
  63. j--;
  64. }
  65. if(now[i]) { f=false; break; }
  66. }
  67. if(f) ans=min(ans,sum);
  68. }
  69. printf("%d\n",ans==1e9 ? - : ans);
  70. }
  71. }

就是这个http://www.cnblogs.com/TheRoadToTheGold/p/7679195.html

2017 国庆湖南 Day6的更多相关文章

  1. 2017 国庆湖南 Day5

    期望得分:76+80+30=186 实际得分:72+10+0=82 先看第一问: 本题不是求方案数,所以我们不关心 选的数是什么以及的选的顺序 只关心选了某个数后,对当前gcd的影响 预处理 cnt[ ...

  2. 2017 国庆湖南 Day1

    卡特兰数 #include<cstdio> #include<cstring> #include<algorithm> using namespace std; ] ...

  3. 2017 国庆湖南 Day3

    期望得分:100+30+60=190 实际得分:10+0+55=65 到了233 2是奇数位 或223 第2个2是偶数位就会223 .233 循环 #include<cstdio> #de ...

  4. 2017 国庆湖南 Day4

    期望得分:20+40+100=160 实际得分:20+20+100=140 破题关键: f(i)=i 证明:设[1,i]中与i互质的数分别为a1,a2……aφ(i) 那么 i-a1,i-a2,…… i ...

  5. 2017 国庆湖南Day2

    期望得分:100+30+100=230 实际得分:100+30+70=200 T3 数组开小了 ..... 记录 1的前缀和,0的后缀和 枚举第一个1的出现位置 #include<cstdio& ...

  6. 学大伟业 2017 国庆 Day1

    期望得分:100+100+20=220 实际得分:100+100+20=220 (好久没有期望==实际了 ,~\(≧▽≦)/~) 对于 a........a 如果 第1个a 后面出现的第1个b~z 是 ...

  7. 2017国庆 清北学堂 北京综合强化班 Day1

    期望得分:60+ +0=60+ 实际得分:30+56+0=86 时间规划极端不合理,T2忘了叉积计算,用解析几何算,还有的情况很难处理,浪费太多时间,最后gg 导致T3只剩50分钟,20分钟写完代码, ...

  8. 牛客国庆集训day6 B Board (模拟标记思维或找规律或分块???)

    链接:https://www.nowcoder.com/acm/contest/206/B来源:牛客网 题目描述 恬恬有一个nx n的数组.她在用这个数组玩游戏: 开始时,数组中每一个元素都是0. 恬 ...

  9. 2017.10.1 国庆清北 D1T1 zhx的字符串题

    题目背景 2017国庆清北D1T1 题目描述 你是能看到第一题的 friends 呢. ——hja 何大爷对字符串十分有研究,于是天天出字符串题虐杀 zhx.何大爷今天为 字符串定义了新的权值计算方法 ...

随机推荐

  1. ssm框架之将数据库的数据导入导出为excel文件

    在这里首先我要将自己遇到的各种问题,以及需求记录下来,做一个备忘,便于以后查看: 需求:主要实现两个功能,将oracle数据库里的数据导出为excel,同时需要将excel表格的数据导入到数据库 环境 ...

  2. I/HwPointEventFilter: do not support AFT because of no config

    I/HwPointEventFilter: do not support AFT because of no config 这是华为对系统做了修改,默认不打印日志,要改配置 在拨号界面输入:以下进入工 ...

  3. [BZOJ4517] [Sdoi2016] 排列计数 (数学)

    Description 求有多少种长度为 n 的序列 A,满足以下条件: 1 ~ n 这 n 个数在序列中各出现了一次 若第 i 个数 A[i] 的值为 i,则称 i 是稳定的.序列恰好有 m 个数是 ...

  4. 记录一次网站漏洞修复过程(二):第一轮处理(IIS目录枚举、应用程序错误)

    解决IIS目录枚举 当前的IIS版本为7.5 [IIS]   => [请求筛选] => [URL]中添加 [拒绝序列] 符号  ~ 应用程序错误 在Global.asax 中添加异常处理代 ...

  5. 【python学习笔记】7.更加抽象

    [python学习笔记]7.更加抽象 类的定义就是执行代码块 在内存保存一个原始实例,可以通过类名来访问 类的实例化,是创建一个原始实例的副本, 并且所有成员变量与原始实例绑定 通过修改实例变量,可以 ...

  6. 【django之分页器】

    一.什么是分页功能 二.Django的分页器(paginator) 语法: paginator = Paginator(book_list, 8) #8条一页print("count:&qu ...

  7. java--计时器

    计时器 一.窗口化 public class Pro extends JFrame{ private JTextField textField = new JTextField(45);//系统时间文 ...

  8. 快速搭建CentOS+ASP.NET Core环境支持WebSocket

    环境:CentOS 7.x,.net core 2 以下.net core 2安装操作为官方方法.如果你使用Docker,那么更简单了,只需要docker pull microsoft/dotnet就 ...

  9. python中干掉tornado的连接失败日志

    用了tornado真的是比较舒服,很多事都为你做好了. 但也有不令人满意的地方--对于我这个洁癖来说,自动给我的控制台打印不受我控制的信息是不能忍受的. 连接到一个新的地方,如果失败,tornado会 ...

  10. [Apio2010] 巡逻

    Description Input 第一行包含两个整数 n, K(1 ≤ K ≤ 2).接下来 n – 1行,每行两个整数 a, b, 表示村庄a与b之间有一条道路(1 ≤ a, b ≤ n). Ou ...