#2021. 「AHOI / HNOI2017」大佬

 

题目描述

人们总是难免会碰到大佬。他们趾高气昂地谈论凡人不能理解的算法和数据结构,走到任何一个地方,大佬的气场就能让周围的人吓得瑟瑟发抖,不敢言语。你作为一个 OIer,面对这样的事情非常不开心,于是发表了对大佬不敬的言论。 大佬便对你开始了报复,你也不示弱,扬言要打倒大佬。现在给你讲解一下什么是大佬,大佬除了是神犇以外,还有着强大的自信心,自信程度可以被量化为一个正整数 CCC,想要打倒一个大佬的唯一方法是摧毁 Ta 的自信心,也就是让大佬的自信值等于 000(恰好等于 000,不能小于 000)。由于你被大佬盯上了,所以你需要准备好 nnn 天来和大佬较量,因为这 nnn 天大佬只会嘲讽你动摇你的自信,到了第 n+1n+1n+1 天,如果大佬发现你还不服,就会直接虐到你服,这样你就丧失斗争的能力了。

你的自信程度同样也可以被量化,我们用 mc\mathrm{mc}mc 来表示你的自信值上限。在第 i (i≥1)i \ (i\ge 1)i (i≥1) 天,大佬会对你发动一次嘲讽,使你的自信值减小 aia_ia​i​​,如果这个时刻你的自信值小于 000了,那么你就丧失斗争能力,也就失败了(特别注意你的自信值为 000 的时候还可以继续和大佬斗争)。 在这一天,大佬对你发动嘲讽之后,如果你的自信值仍大于等于 000,你能且仅能选择如下的行为之一:

  1. 还一句嘴,大佬会有点惊讶,导致大佬的自信值 CCC 减小 111。
  2. 做一天的水题,使得自己的当前自信值增加 wiw_iw​i​​,并将新自信值和自信值上限 mc\mathrm{mc}mc 比较,若新自信值大于 mc\mathrm{mc}mc,则新自信值更新为 mc\mathrm{mc}mc。例如,mc=50\mathrm{mc} = 50mc=50,当前自信值为 404040,若 wi=5w_i = 5w​i​​=5,则新自信值为 454545,若 wi=11w_i = 11w​i​​=11,则新自信值为 505050。
  3. 让自己的等级值 LLL 加 111。
  4. 让自己的讽刺能力 FFF 乘以自己当前等级 LLL,使讽刺能力 FFF 更新为 F⋅LF\cdot LF⋅L。
  5. 怼大佬,让大佬的自信值 CCC 减小 FFF。并在怼完大佬之后,你自己的等级 LLL 自动降为 000,讽刺能力 FFF 降为 111。由于怼大佬比较掉人品,所以这个操作只能做不超过两次。

特别注意的是,在任何时候,你不能让大佬的自信值为负,因为自信值为负,对大佬来说意味着屈辱,而大佬但凡遇到屈辱就会进化为更厉害的大佬直接虐飞你。在第 111 天,在你被攻击之前,你的自信是满的(初始自信值等于自信值上限 mc\mathrm{mc}mc),你的讽刺能力 FFF 是 111,等级是 000。

现在由于你得罪了大佬,你需要准备和大佬正面杠,你知道世界上一共有 mmm 个大佬,他们的嘲讽时间都是 nnn 天,而且第 iii 天的嘲讽值都是 aia_ia​i​​。不管和哪个大佬较量,你在第 iii 天做水题的自信回涨都是 wiw_iw​i​​。这 mmm 个大佬中只会有一个来和你较量(nnn 天里都是这个大佬和你较量),但是作为你,你需要知道对于任意一个大佬,你是否能摧毁他的自信,也就是让他的自信值恰好等于 000。和某一个大佬较量时,其他大佬不会插手。

输入格式

第一行三个正整数 n,m,mcn,m,\mathrm{mc}n,m,mc。分别表示有 nnn 天和 mmm 个大佬,你的自信上限为 mc\mathrm{mc}mc。
接下来一行是用空格隔开的 nnn 个数,其中第 i(1≤i≤n)i(1\le i\le n)i(1≤i≤n) 个表示 aia_ia​i​​。
接下来一行是用空格隔开的 nnn 个数,其中第 i(1≤i≤n)i(1\le i\le n)i(1≤i≤n) 个表示 wiw_iw​i​​。
接下来 mmm 行,每行一个正整数,其中第 k(1≤k≤m)k(1\le k\le m)k(1≤k≤m) 行的正整数 CkC_kC​k​​ 表示第 kkk 个大佬的初始自信值。

输出格式

共 mmm 行,如果能战胜第 kkk 个大佬(让他的自信值恰好等于 0),那么第 kkk 行输出 111,否则输出 000。

样例

样例输入

  1. 30 20 30
  2. 15 5 24 14 13 4 14 21 3 16 7 4 7 8 13 19 16 5 6 13 21 12 7 9 4 15 20 4 13 12
  3. 22 21 15 16 17 1 21 19 11 8 3 28 7 10 19 3 27 17 28 3 26 4 22 28 15 5 26 9 5 26
  4. 30
  5. 10
  6. 18
  7. 29
  8. 18
  9. 29
  10. 3
  11. 12
  12. 28
  13. 11
  14. 28
  15. 6
  16. 1
  17. 6
  18. 27
  19. 27
  20. 18
  21. 11
  22. 26
  23. 1

样例输出

  1. 0
  2. 1
  3. 1
  4. 0
  5. 1
  6. 0
  7. 1
  8. 1
  9. 0
  10. 0
  11. 0
  12. 1
  13. 1
  14. 1
  15. 1
  16. 1
  17. 1
  18. 0
  19. 0
  20. 1

数据范围与提示

对于 20%20\%20% 的数据,1≤n≤101\le n\le 101≤n≤10;
另有 20%20\%20% 数据,1≤Ci,n,mc≤301\le C_i,n,\mathrm{mc}\le 301≤C​i​​,n,mc≤30;
对于 100%100\%100% 的数据,1≤n,mc≤100,1≤m≤20;1≤ai,wi≤mc,1≤Ci≤1081\le n, \mathrm{mc}\le 100, 1\le m\le 20; 1\le a_i, w_i\le\mathrm{mc}, 1\le C_i\le 10^81≤n,mc≤100,1≤m≤20;1≤a​i​​,w​i​​≤mc,1≤C​i​​≤10​8​​。

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #define maxn 50
  5. using namespace std;
  6. int n,m,mc,a[maxn],w[maxn],c,res;
  7. void dfs(int pos,int L,int F,int C,int cc,int t){
  8. cc-=a[pos];
  9. if(C==){res=;return;}
  10. if(cc<)return;
  11. if(C<)return;
  12. if(res)return;
  13. if(pos==n+)return;
  14. dfs(pos+,L,F,C-,cc,t);
  15. dfs(pos+,L,F,C,min(mc,cc+w[pos]),t);
  16. dfs(pos+,L+,F,C,cc,t);
  17. dfs(pos+,L,F*L,C,cc,t);
  18. if(t<)dfs(pos+,,,C-F,cc,t+);
  19. }
  20. bool work(){
  21. res=;
  22. dfs(,,,c,mc,);
  23. return res;
  24. }
  25. int main(){
  26. scanf("%d%d%d",&n,&m,&mc);
  27. for(int i=;i<=n;i++)scanf("%d",&a[i]);
  28. for(int i=;i<=n;i++)scanf("%d",&w[i]);
  29. while(m--){
  30. scanf("%d",&c);
  31. printf("%d\n",work());
  32. }
  33. return ;
  34. }

40分 暴力

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #define maxn 110
  5. using namespace std;
  6. int n,m,mc,dp[maxn][maxn],U,d,a[maxn],w[maxn],c[maxn],v[];
  7. char s[];
  8. void dfs(int x,int L,int F){
  9. if(x>d)return;
  10. if(1LL*(L+)*F<=U)dfs(x+,L+,F);
  11. if(L&&1LL*L*F<=U){
  12. if(!s[1LL*L*F]||s[1LL*L*F]>x)
  13. s[L*F]=x,dfs(x+,L,1LL*F*L);
  14. }
  15. }
  16. int main(){
  17. freopen("Cola.txt","r",stdin);
  18. scanf("%d%d%d",&n,&m,&mc);
  19. for(int i=;i<=n;i++)scanf("%d",&a[i]);
  20. for(int i=;i<=n;i++)scanf("%d",&w[i]);
  21. memset(dp,-,sizeof(dp));
  22. dp[][mc]=;
  23. for(int i=;i<=n;i++)
  24. for(int j=a[i];j<=mc;j++){
  25. if(dp[i][j]==-)continue;
  26. int k=min(j-a[i]+w[i],mc);
  27. dp[i+][k]=max(dp[i+][k],dp[i][j]);
  28. dp[i+][j-a[i]]=max(dp[i+][j-a[i]],dp[i][j]+);
  29. }
  30. for(int i=;i<=n+;i++)
  31. for(int j=;j<=mc;j++)d=max(d,dp[i][j]);
  32. for(int i=;i<=m;i++){
  33. scanf("%d",&c[i]);
  34. U=max(U,c[i]);
  35. }
  36. dfs(,,);
  37. for(int i=;i<=U;i++)
  38. if(s[i])v[++v[]]=i;
  39. for(int k=;k<=m;k++){
  40. bool flag=;
  41. for(int j=;j<=v[] && !flag && v[j]<=c[k];j++)
  42. if(d+v[j]-s[v[j]]->=c[k])flag=;
  43. for(int i=;i<=d&&!flag;i++)
  44. for(int j=;!flag&&j<=v[]&&i+v[j]<=c[k];j++)
  45. if(s[c[k]-v[j]-i]&&i+s[v[j]]+s[c[k]-v[j]-i]+<=d)flag=;
  46. printf("%d\n",flag);
  47. }
  48. return ;
  49. }

100分 dp

loj #2021. 「AHOI / HNOI2017」大佬的更多相关文章

  1. loj#2020 「AHOI / HNOI2017」礼物 ntt

    loj#2020 「AHOI / HNOI2017」礼物 链接 bzoj没\(letex\),差评 loj luogu 思路 最小化\(\sum\limits_1^n(a_i-b_i)^2\) 设改变 ...

  2. [LOJ 2022]「AHOI / HNOI2017」队长快跑

    [LOJ 2022]「AHOI / HNOI2017」队长快跑 链接 链接 题解 不难看出,除了影响到起点和终点的射线以外,射线的角度没有意义,因为如果一定要从该射线的射出一侧过去,必然会撞到射线 因 ...

  3. loj #2023. 「AHOI / HNOI2017」抛硬币

    #2023. 「AHOI / HNOI2017」抛硬币   题目描述 小 A 和小 B 是一对好朋友,他们经常一起愉快的玩耍.最近小 B 沉迷于**师手游,天天刷本,根本无心搞学习.但是已经入坑了几个 ...

  4. LOJ#2019. 「AHOI / HNOI2017」影魔

    题意: 在一个序列中 如果有一个子区间 它有一个端点是区间最大值 另一个端点不是这个区间的次大值 就会有p2的贡献 它两个端点分别是最大值次大值 就会有p1的贡献 我们发现这两个条件有一个重合的部分 ...

  5. loj#2020. 「AHOI / HNOI2017」礼物

    题意:给定xy数组求 \(\sum_{i=0}^{n-1}(x_i+y_{(i+k)\modn}+c)^2\) 题解:先化简可得 \(n*c^2+2*\sum_{i=0}^{n-1}x_i-y_i+\ ...

  6. Loj #2495. 「AHOI / HNOI2018」转盘

    Loj #2495. 「AHOI / HNOI2018」转盘 题目描述 一次小 G 和小 H 原本准备去聚餐,但由于太麻烦了于是题面简化如下: 一个转盘上有摆成一圈的 \(n\) 个物品(编号 \(1 ...

  7. Loj #2494. 「AHOI / HNOI2018」寻宝游戏

    Loj #2494. 「AHOI / HNOI2018」寻宝游戏 题目描述 某大学每年都会有一次 Mystery Hunt 的活动,玩家需要根据设置的线索解谜,找到宝藏的位置,前一年获胜的队伍可以获得 ...

  8. 「AHOI / HNOI2017」单旋

    「AHOI / HNOI2017」单旋 题目链接 H 国是一个热爱写代码的国家,那里的人们很小去学校学习写各种各样的数据结构.伸展树(splay)是一种数据结构,因为代码好写,功能多,效率高,掌握这种 ...

  9. 「AHOI / HNOI2017」影魔

    「AHOI / HNOI2017」影魔 题目描述 解决这类比较复杂的区间贡献问题关键在于找到计算的对象. 比如这道题,我们计算的对象就是区间中间的最大值. 对于点\(i\),我们找到左边第一个比他大的 ...

随机推荐

  1. 西安电子科技大学第16届程序设计竞赛 E Xieldy And His Password

    链接:https://www.nowcoder.com/acm/contest/107/E来源:牛客网 Xieldy And His Password 时间限制:C/C++ 1秒,其他语言2秒 空间限 ...

  2. src路径

  3. CentOS 配置XWIN/VNC

    Xwin服务器 CentOS上运维Xwin,在这之前需要理清一些关系: 一,  X window 包括xserver 和x client.linux下的xserver 主要有xorg.xfree86, ...

  4. jQuery选择器整理

    最使用近工作中常用到jQuery,在过滤器的使用方面生疏,所以本文整理了些有关知识点,以便于自己查找方便,或为朋友们提供方便! 一.基本选择器 $("#test") 选取id为te ...

  5. 在Linux下adb连接不上android手机的终极解决方案

    转自: http://blog.csdn.net/liuqz2009/article/details/7942569 1.做android开发的过程,碰到了Linux下adb识别不了android设备 ...

  6. latex学习

    第一段代码 \documentclass{article} \usepackage{ctex} \begin{document} \section{文字} 特可爱模板 \section{数学} \[ ...

  7. Opengl创建机器人手臂代码示例

    /*******************************************************robot.cpp*基于opengl的机械手臂示例代码*s:机械臂逆时针旋转*S:机械臂 ...

  8. iOS 列表三级展开

    效果图如下:        #import <UIKit/UIKit.h> @interface AppDelegate : UIResponder <UIApplicationDe ...

  9. vray学习笔记(1)vray介绍

    vray是个什么东西? 它是个渲染器. 渲染器是个什么东西? 渲染器就是3d软件里面把模型画成一张图片的东西,渲染的过程就是把3D物体变成2D画面的过程. 模型是个什么东西? 模型就是模型,它由两部分 ...

  10. Libcurl 简明使用指南

    http://blog.csdn.net/weiling_shen/article/details/7620397 我们的程序中使用的是人家的Easy.h头文件.....完成文件的上传和下传. 尤其是 ...