1.LOJ 507 接竹竿

link

dp[i]表示前i个的最大分数,所以dp[i]=max(dp[i-1],dp[j-1]+sum[i]-sum[j-1])   (color i ==color j&&i>j)选与不选的两种决策

但是这样跑为O(N^2),需要优化,发现dp[j-1]-sum[j-1]是个在之前知道的数,所以可以记录下来当需要用这种颜色时的最大dp[j-1]-sum[j-1]

用lst[i]表示在当前情况下需要用color i这种颜色时的最大dp[j-1]-sum[j-1]这个值,因为这两者之间的共处是颜色

所以用颜色维护

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. using namespace std;
  6. inline long long read()
  7. {
  8. long long f=,ans=;char c;
  9. while(c<''||c>''){if(c=='-')f=-;c=getchar();}
  10. while(c>=''&&c<=''){ans=ans*+c-'';c=getchar();}
  11. return f*ans;
  12. }
  13. long long n,k;
  14. long long c[],v[],lst[],sum[],dp[];
  15. int main()
  16. {
  17. memset(lst,-/,sizeof(lst));
  18. n=read(),k=read();
  19. for(long long i=;i<=n;i++) c[i]=read();
  20. for(long long i=;i<=n;i++) v[i]=read(),sum[i]=sum[i-]+v[i];
  21. for(long long i=;i<=n;i++)
  22. {
  23. dp[i]=max(dp[i-],lst[c[i]]+sum[i]);
  24. lst[c[i]]=max(lst[c[i]],dp[i-]-sum[i-]);
  25. }
  26. cout<<dp[n];
  27. }

2.LOJ 2279 降雨量

link

这道题先要仔细的读题,读完题后发现此题十分可做,但是最后全WA,因为没有看到它的含义是 X 年的降雨量不超过 Y  年这句话

分类讨论+ST表

先用ST表处理(i,j)之间的最大值(i,j为年份下标)

解决问题如果询问i,j

二分寻找u,v年份下标

用nx记录查找的下标对应的值是否等于此年份,因为有可能没有u,v年份的降雨量

然后分类讨论(this is 重点,not ST表)

1)nx==1时

1)ny==1时 已知 x,y(降水量) 那么首先判断x,y的大小,在判断包含区间的关系

2) ny==0时,说明只能与u进行比较,中间包含最大值与x的关系

2)nx==0

1) ny==1时,找中间包含区域与y的关系

2)  ny==0,那么两头全部位置,所以maybe

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. #include<cmath>
  6. using namespace std;
  7. inline long long read()
  8. {
  9. long long f=,ans=;char c;
  10. while(c<''||c>''){if(c=='-')f=-;c=getchar();}
  11. while(c>=''&&c<=''){ans=ans*+c-'';c=getchar();}
  12. return f*ans;
  13. }
  14. long long ma[];
  15. long long n,m;
  16. long long maxn[][];
  17. long long query(long long l,long long r)
  18. {
  19. if(l>r) return -(<<-);
  20. long long k=log2(r-l+);
  21. return max(maxn[l][k],maxn[r-(<<k)+][k]);
  22. }
  23. long long num;
  24. int main()
  25. {
  26. // freopen("rainfall.in","r",stdin);
  27. // freopen("rainfall.out","w",stdout);
  28. // freopen("1.in","r",stdin);
  29. n=read();
  30. for(long long i=;i<=n;i++)
  31. {
  32. ma[i]=read();
  33. maxn[i][]=read();
  34. }
  35. for(long long j=;j<=log2(n);j++)
  36. for(long long i=;i+(<<j)-<=n;i++) maxn[i][j]=max(maxn[i][j-],maxn[i+(<<(j-))][j-]);
  37. m=read();
  38. for(long long i=;i<=m;i++)
  39. {
  40. int ans;
  41. long long x=read(),y=read();
  42. int sx=lower_bound(ma+,ma+n+,x)-ma,sy=lower_bound(ma+,ma+n+,y)-ma;
  43. bool nx=(sx<=n&&ma[sx]==x),ny=(sy<=n&&ma[sy]==y);
  44. // cout<<sx<<" "<<sy<<" "<<nx<<" "<<ny<<endl;
  45. if(nx)
  46. {
  47. if(ny)
  48. {
  49. int q=query(sx+,sy-);
  50. // cout<<q<<" "<<maxn[sx][0]<<" "<<maxn[sy][0]<<endl;
  51. if(maxn[sy][]>maxn[sx][]) ans=;
  52. else if(q<maxn[sy][])
  53. {
  54. if(y-x+==sy-sx+) ans=;
  55. else ans=-;
  56. }
  57. else ans=;
  58. }
  59. else{
  60. int q=query(sx+,sy-);
  61. if(maxn[sx][]>q) ans=-;
  62. else ans=;
  63. }
  64. }
  65. else{
  66. if(ny)
  67. {
  68. int q=query(sx,sy-);
  69. if(q<maxn[sy][]) ans=-;
  70. else ans=;
  71. }else ans=-;
  72. }
  73. if(ans==) printf("true\n");
  74. else if(ans==) printf("false\n");
  75. else printf("maybe\n");
  76. }
  77. }
  78. /*
  79. 4
  80. 54 8606
  81. 77 7706
  82. 100 2149
  83. 123 900
  84. 1
  85. 2 54
  86.  
  87. */

3.LOJ 2332 焚风现象

link

官方讲评

因为是可以升降海拔高度的但是算的是差值,所以[u,v]区域内答案没有发生影响,至于(u-1,u)与(v,v+1)有影响

每次算值现将二者减去,再分别减,加差值,因为+w所以dis[u-1]+w ,但是对于v来说它是减数所以当他加上一个值时反而是减所以dis[v]-=w

dis[i]表示从i到i+1的海拔高

而因为若v=n时v+1已经越界所以就不再计算

此方法时间复杂度O(q+n)

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. using namespace std;
  6. inline long long read()
  7. {
  8. long long f=,ans=;char c;
  9. while(c<''||c>''){if(c=='-')f=-;c=getchar();}
  10. while(c>=''&&c<=''){ans=ans*+c-'';c=getchar();}
  11. return f*ans;
  12. }
  13. long long n,q,a[],s,t,dis[];
  14. long long get(long long tt)
  15. {
  16. if(tt>) return -s*tt;
  17. return -tt*t;
  18. }
  19. long long ans;
  20. int main()
  21. {
  22. n=read(),q=read(),s=read(),t=read();
  23. for(long long i=;i<=n;i++) a[i]=read();
  24. for(long long i=;i<n;i++)
  25. {
  26. dis[i]=a[i+]-a[i];
  27. ans+=get(dis[i]);
  28. }
  29. while(q--)
  30. {
  31. long long a=read(),b=read(),c=read();
  32. ans-=get(dis[a-]);
  33. dis[a-]+=c;
  34. ans+=get(dis[a-]);
  35. if(b!=n)
  36. {
  37. ans-=get(dis[b]);
  38. dis[b]-=c;
  39. ans+=get(dis[b]);
  40. }
  41. printf("%lld\n",ans);
  42. // cout<<ans<<endl;
  43. }
  44. }

总结:这其实是一场考试,最后100分收尾,只A了第三题,后来发现这是一场普及组的卷子,心态要炸

LOJ 模拟赛的更多相关文章

  1. 冲刺$\mathfrak{CSP-S}$集训模拟赛总结

    开坑.手懒并不想继续一场考试一篇文. 既没必要也没时间侧边栏的最新随笔题解反思相间也丑 而且最近越来越懒了竟然都不写题解了……开坑也是为了督促自己写题解. 并不想长篇大论.简要题解也得写啊QAQ. 目 ...

  2. NOIP模拟赛20161022

    NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...

  3. NOI模拟赛 Day1

    [考完试不想说话系列] 他们都会做呢QAQ 我毛线也不会呢QAQ 悲伤ING 考试问题: 1.感觉不是很清醒,有点困╯﹏╰ 2.为啥总不按照计划来!!! 3.脑洞在哪里 4.把模拟赛当作真正的比赛,紧 ...

  4. NOIP第7场模拟赛题解

    NOIP模拟赛第7场题解: 题解见:http://www.cqoi.net:2012/JudgeOnline/problemset.php?page=13 题号为2221-2224. 1.car 边界 ...

  5. contesthunter暑假NOIP模拟赛第一场题解

    contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...

  6. NOIP模拟赛 by hzwer

    2015年10月04日NOIP模拟赛 by hzwer    (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...

  7. 小奇模拟赛9.13 by hzwer

    2015年9月13日NOIP模拟赛 by hzwer    (这是小奇=> 小奇挖矿(explo) [题目背景] 小奇要开采一些矿物,它驾驶着一台带有钻头(初始能力值w)的飞船,按既定路线依次飞 ...

  8. PKUSC 模拟赛 day1 下午总结

    下午到了机房之后又困又饿,还要被强行摁着看英文题,简直差评 第一题是NOIP模拟赛的原题,随便模拟就好啦 本人模拟功力太渣不小心打错了个变量,居然调了40多分钟QAQ #include<cstd ...

  9. [GRYZ]寒假模拟赛

    写在前面 这是首次广饶一中的OIERS自编自导,自出自做(zuo)的模拟赛. 鉴于水平气压比较低,机(wei)智(suo)的WMY/XYD/HYXZC就上网FQ下海找了不少水(fei)题,经过他们优( ...

随机推荐

  1. svn清理报错:Cleanup failed to process the following paths

    这里碰到svn更新时,提示清理,清理时报错: 只需进行以下几个步骤即可解决:(原理即是清除掉svn数据库里的lock记录) 1.下载SQLiteManager,svn用的是sqlite数据库,需要一款 ...

  2. [CF19B]Checkout Assistant

    题目描述 Bob 来到一家现购自运商店,将 n 件商品放入了他的手推车,然后到收银台 付款.每件商品由它的价格 pi 和收银员扫描它的时间 ti 秒定义.当收银员正在扫 描某件商品时,Bob 可以从他 ...

  3. php导出excel表格的使用

    网站后台有很多列表数据,常常都会有导出excel表格的需求,和大家分享一个实用的导出excel表格方法: 不多说,上代码: /** * @param array $data 要导出的数据 * @par ...

  4. lintcode 二分查找

    题目:二分查找 描述:给定一个排序的整数数组(升序)和一个要查找的整数target,用O(logn)的时间查找到target第一次出现的下标(从0开始),如果target不存在于数组中,返回-1. c ...

  5. Case 降序升序排列

    select nc.Class_Name,hn.home_news_id,hn.hemo_id,hn.hemo_Date, hn.hemo_title,hemo_order from Hemo_New ...

  6. Linux系统inotify工具安装配置

    inotify主要功能 Inotify 是一个 Linux特性,它监控文件系统操作,比如读取.写入和创建.Inotify 反应灵敏,用法非常简单,并且比 cron 任务的繁忙轮询高效得多.学习如何将 ...

  7. iOS- 无处不在,详解iOS集成第三方登录(SSO授权登录<无需密码>)

    1.前言   不多说,第三登录无处不在!必备技能,今天以新浪微博为例. 这是上次写的iOS第三方社交分享:http://www.cnblogs.com/qingche/p/3727559.html 可 ...

  8. iOS- UITableViewCell对象是怎么重用的 ?

    iOS设备的内存有限,如果用UITableView显示成千上万条数据, 就需要成千上万个UITableViewCell对象的话, 那将会耗尽iOS设备的内存.要解决该问题,需要重用UITableVie ...

  9. 201621044079WEEK作业08-集合

    作业08-集合 1. 本周学习总结 以你喜欢的方式(思维导图或其他)归纳总结集合相关内容. 2. 书面作业 1. ArrayList代码分析 1.1 解释ArrayList的contains源代码 如 ...

  10. ZOJ 1711 H-Sum It Up

    https://vjudge.net/contest/67836#problem/H Given a specified total t and a list of n integers, find ...