水灾(sliker.cpp/c/pas) 1000MS  64MB

大雨应经下了几天雨,却还是没有停的样子。土豪CCY刚从外地赚完1e元回来,知道不久除了自己别墅,其他的地方都将会被洪水淹没。

CCY所在的城市可以用一个N*M(N,M<=50)的地图表示,地图上有五种符号:“. * X D S”。其中“X”表示石头,水和人都不能从上面经过。“.”表示平原,CCY和洪水都可以经过。“*”表示洪水开始地方(可能有多个地方开始发生洪水)。“D”表示CCY的别墅。“S”表示CCY现在的位置。

CCY每分钟可以向相邻位置移动,而洪水将会在CCY移动之后把相邻的没有的土地淹没(从已淹没的土地)。

求CCY回到别墅的最少时间。如果聪哥回不了家,就很可能会被淹死,那么他就要膜拜黄金大神涨RP来呼叫直升飞机,所以输出“ORZ hzwer!!!”。

输入文件 sliker.in

输出文件 sliker.out

Input

3 3

D.*

.S.

 

Output

3

 

Input

3 3

D.*

..S

 

Output

ORZ
hzwer!!!

 

Input

3
6

D…*.

.X.X..

….S.

 

Output

6

  裸bfs不贴了(其实是因为第一次写完之后发生了一个悲惨的故事~~ 没存电脑就XX了)

 

 

某种数列问题  (jx.cpp/c/pas) 1000MS 256MB

 

众所周知,chenzeyu97有无数的妹子(阿掉!>_<),而且他还有很多恶趣味的问题,继上次纠结于一排妹子的排法以后,今天他有非(chi)常(bao)认(cheng)真(zhe)去研究一个奇怪的问题。有一堆他的妹子站成一排,然后对于每个妹子有一个美丽度,当然美丽度越大越好,chenzeyu97妹子很多,但是质量上不容乐观,经常出现很多美丽度为负数的妹子(喜闻乐见),chenzeyu97希望从一排妹子里找出3队连续的妹子,使她们的美丽度和最大。注意,一个妹子不能被编入多个队伍而且一定要拿出三队,不然czy会闲着没事做~。

简单滴说就是:

给定一个数列,从中找到3个无交集的连续子数列使其和最大。

【输入文件】

第一行一个数n,表示数列长度。

接下来有n行,每行一个数,第i行为第i个数。

 

【输出文件】

仅有一个数,表示最大和。

 

【样例输入】
jx.in

10

-1

2

3

-4

0

1

-6

-1

1

-2

 

【样例输出】
jx.out

7

 

【样例说明】

第一队妹子取2,3。

第二队妹子取0,1。

第三队妹子取1。

 

【数据范围】

请大家放心,虽然chenzeyu97妹子无数,但是这次他叫来的个数n是有限的。=v=

对于30%的数据,妹子数不大于200。

对于60%的数据,妹子数不大于2000。

对于100%的数据,妹子数1000000。

而且,由于chenzeyu97没有CCR那样的影响力,所以他的妹子选完的最大美丽度和不超过maxlongint。(注:CCR随便选就爆long long,因为他是把妹狂魔=V=)。

 

 开始想的是跑7次最大连续子段和 后来发现由bug 而且不好修复 目测能蒙对一部分数据吧

正解dp

  1. /*以后养成好习惯 写暴力对拍(可我老是写错暴力...)*/
  2. #include<iostream>
  3. #include<cstdio>
  4. #include<cstring>
  5. #define inf 0x3f3f3f3f
  6. using namespace std;
  7. int n,a[],ans=-inf;
  8. void Dfs(int now,int num,int s){
  9. if(now==n+){
  10. if(num==)ans=max(ans,s);
  11. return;
  12. }
  13. Dfs(now+,num,s);
  14. Dfs(now+,num,s+a[now]);
  15. Dfs(now+,num+,s+a[now]);
  16. Dfs(now+,num+,s);
  17. }
  18. int main()
  19. {
  20. freopen("jx.in","r",stdin);
  21. freopen("jx.out","w",stdout);
  22. scanf("%d",&n);
  23. for(int i=;i<=n;i++)
  24. scanf("%d",&a[i]);
  25. Dfs(,,);
  26. printf("%d\n",ans);
  27. return ;
  28. }
  29.  
  30. #include<iostream>
  31. #include<cstdio>
  32. #include<cstring>
  33. #define maxn 1000010
  34. using namespace std;
  35. int n,a[maxn],f[maxn][][];
  36. int main()
  37. {
  38. freopen("jx.in","r",stdin);
  39. freopen("jx.out","w",stdout);
  40. scanf("%d",&n);
  41. for(int i=;i<=n;i++)
  42. scanf("%d",&a[i]);
  43. memset(f,-/,sizeof(f));
  44. f[][][]=;
  45. for(int i=;i<=n;i++)
  46. for(int j=;j<=;j++){
  47. f[i][j][]=max(f[i-][j][],f[i-][j][]);
  48. if(j)f[i][j][]=max(f[i-][j-][],f[i-][j-][])+a[i];
  49. f[i][j][]=max(f[i][j][],f[i-][j][]+a[i]);
  50. }
  51. printf("%d\n",max(f[n][][],f[n][][]));
  52. }

密码锁 1000MS 512MB

Input: password.in

Output: password.out

【题目描述】

hzwer有一把密码锁,由N个开关组成。一开始的时候,所有开关都是关上的。当且仅当开关x1,x2,x3,...xk为开,其他开关为关时,密码锁才会打开。

他可以进行M种的操作,每种操作有一个size[i],表示,假如他选择了第i种的操作的话,他可以任意选择连续的size[i]个格子,把它们全部取反。(注意,由于黄金大神非常的神,所以操作次数可以无限>_<)

本来这是一个无关紧要的问题,但是,黄金大神不小心他的钱丢进去了,没有的钱他哪里能逃过被chenzeyu97 NTR的命运?>_<  于是,他为了虐爆czy,也为了去泡更多的妹子,决定打开这把锁。但是他那么神的人根本不屑这种”水题”。于是,他找到了你。

你的任务很简单,求出最少需要多少步才能打开密码锁,或者如果无解的话,请输出-1。

【输入格式】

第1行,三个正整数N,K,M,如题目所述。

第2行,K个正整数,表示开关x1,x2,x3..xk必须为开,保证x两两不同。

第三行,M个正整数,表示size[i],size[]可能有重复元素。

【输出格式】

输出答案,无解输出-1。

【样例输入1】

10 8 2

1 2 3 5 6 7 8 9

3 5

【样例输出1】

2

【样例输入2】

3 2 1

1 2

3

【样例输出2】

-1

 

 

【数据规模】

对于50%的数据,1≤N≤20,1≤k≤5,1≤m≤3;

对于另外20%的数据,1≤N≤10000,1≤k≤5,1≤m≤30;

对于100%的数据,1≤N≤10000,1≤k≤10,1≤m≤100。

 机智的题解

  1. /*
  2. 完全没思路的 我是蒟蒻QAQ
  3. 看了题解 好巧妙Qrz
  4. 对于区间取反 复杂度是O(n)
  5. 但是因为这题序列只有01
  6. 如果操作查分序列的话就快多了
  7. 先搞出查分序列 然后bfs求出每两个点的1相互抵消最少操作次数
  8. 因为最后的序列最多20个1 所以状丫dp搞一搞求出min操作次数
  9. */
  10. #include<iostream>
  11. #include<cstdio>
  12. #include<cstring>
  13. #include<queue>
  14. #define maxn 10010
  15. using namespace std;
  16. int n,m,k,size[],a[maxn],c[maxn],s[maxn],cnt,step[][];
  17. int f[maxn],dis[maxn],dp[<<],inf;
  18. struct node{
  19. int x,t;
  20. };
  21. queue<node>q;
  22. void Bfs(int S,int o){
  23. while(!q.empty())q.pop();
  24. memset(f,,sizeof(f));
  25. memset(dis,/,sizeof(dis));
  26. inf=dis[];
  27. q.push((node){S,});f[S]=;dis[S]=;
  28. while(!q.empty()){
  29. node p=q.front();q.pop();
  30. for(int i=;i<=k;i++){
  31. int y=p.x+size[i];
  32. if(y<=n&&f[y]==){
  33. f[y]=;dis[y]=p.t+;
  34. q.push((node){y,dis[y]});
  35. }
  36. y=p.x-size[i];
  37. if(y>=&&f[y]==){
  38. f[y]=;dis[y]=p.t+;
  39. q.push((node){y,dis[y]});
  40. }
  41. }
  42. }
  43. for(int i=;i<=cnt;i++)
  44. if(dis[c[i]]<inf)step[o][i]=dis[c[i]];
  45. else step[o][i]=inf;
  46. }
  47. int main()
  48. {
  49. freopen("password.in","r",stdin);
  50. freopen("password.out","w",stdout);
  51. scanf("%d%d%d",&n,&m,&k);
  52. for(int i=;i<=m;i++){
  53. int x;scanf("%d",&x);a[x]++;
  54. }
  55. for(int i=;i<=k;i++)
  56. scanf("%d",&size[i]);
  57. n++;
  58. for(int i=;i<=n;i++)
  59. s[i]=a[i]-a[i-];
  60. for(int i=;i<=n;i++)
  61. if(s[i])c[++cnt]=i;
  62. for(int i=;i<=cnt;i++)
  63. Bfs(c[i],i);
  64. memset(dp,/,sizeof(dp));
  65. inf=dp[];dp[]=;
  66. for(int i=;i<=(<<cnt)-;i++){
  67. int j;
  68. for(int k=;k<=cnt;k++)
  69. if((<<k-)&i){j=k;break;}
  70. for(int k=;k<=cnt;k++)
  71. if((<<k-)&i)dp[i]=min(dp[i],dp[i^(<<j-)^
  72.  
  73. (<<k-)]+step[j][k]);
  74. }
  75. if(dp[(<<cnt)-]==inf)printf("-1\n");
  76. else printf("%d\n",dp[(<<cnt)-]);
  77. return ;
  78. }

conclusion

  1. /*
  2. 今天发生了很凄惨的事情
  3. 蛋疼捡了个优盘插了插
  4. 然后电脑就嗝屁了 我的题
  5. 导致很不爽没有在打T1 T2
  6. T1很水 bfs
  7. T2不是正解 乱搞似乎60分来好像
  8. T3不会正解暴力
  9. 最后看了正解觉得好机智Orz
  10. 区间修改很慢 简化成查分序列单点修改
  11. 还有一问题就是题目规定了每个区间长度
  12. 然后bfs出查分序列中改每两个的步数
  13. 然后根据k<=10 状丫dp跑一下
  14. 很厉害的题解Orz
  15.  
  16. 还是重点看T2 T3这样的我也不指望考场上写出来
  17. 成败在T2 然而今天并没有想出正解
  18. 开始就进了Lis的死胡同 然后各种乱搞....
  19. 正解dp 一维位数 一维选了几个 一维维护这个选没选
  20. 可以的 想到dp剩下的就不是太难了
  21. 关键是一开始没有想对算法 方向不对
  22. 最后发现错误也已经是没时间重新开始了
  23. */

 

9.22 noip模拟试题的更多相关文章

  1. 8.22 NOIP 模拟题

      8.22 NOIP 模拟题 编译命令 g++ -o * *.cpp gcc -o * *.c fpc *.pas 编译器版本 g++/gcc fpc 评测环境 位 Linux, .3GHZ CPU ...

  2. 2018.9.22 NOIP模拟赛

    *注意:这套题目应版权方要求,不得公示题面. 从这里开始 Problem A 妹子 Problem B 旅程 Problem C 老大 因为业务水平下滑太严重,去和高一考NOIP模拟,sad... P ...

  3. 9.22 NOIP模拟题

    吉林省信息学奥赛 2017 冬令营                                                                                    ...

  4. 2018.08.22 NOIP模拟 string(模拟)

    string [描述] 给定两个字符串 s,t,其中 s 只包含小写字母以及*,t 只包含小写字母. 你可以进行任意多次操作,每次选择 s 中的一个*,将它修改为任意多个(可以是 0 个)它的前一个字 ...

  5. 2021.5.22 noip模拟1

    这场考试考得很烂 连暴力都没打好 只拿了25分,,,,,,,,好好总结 T1序列 A. 序列 题目描述 HZ每周一都要举行升旗仪式,国旗班会站成一整列整齐的向前行进. 郭神作为摄像师想要选取其中一段照 ...

  6. 神奇的Noip模拟试题一试 2 排队

    2 排队 (lineup.pas/.c/.cpp) [问题描述] 小sin所在的班有n名同学,正准备排成一列纵队,但他们不想按身高从矮到高排,那样太单调,太没个性.他们希望恰好有k对同学是高的在前,矮 ...

  7. 11.14 noip模拟试题

      题目名称 正确答案 序列问题 长途旅行 英文名称 answer sequence travel 输入文件名 answer.in sequence.in travel.in 输出文件名 answer ...

  8. 11.9 noip模拟试题

    NOIP2016 模拟赛——那些年,我们学过的文化课背单词(word.c/cpp/pas)[题目描述]fqk 退役后开始补习文化课啦, 于是他打开了英语必修一开始背单词. 看着满篇的单词非常头疼, 而 ...

  9. 10.26 noip模拟试题

    enc[问题背景]zhx 和他的妹子聊天.[问题描述]考虑一种简单的加密算法.假定所有句子都由小写英文字母构成,对于每一个字母,我们将它唯一地映射到另一个字母.例如考虑映射规则:a->b, b- ...

随机推荐

  1. 关于.NET的配置文件

    无论是exe文件还是dll文件,都可以添加App.config文件,里面设置配置信息.比如<appSettings></appSettings>之间,可以加入Key-Value ...

  2. bzoj 3240: [Noi2013]矩阵游戏 矩阵乘法+十进制快速幂+常数优化

    3240: [Noi2013]矩阵游戏 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 613  Solved: 256[Submit][Status] ...

  3. C/C++中的内存对齐 C/C++中的内存对齐

    一.什么是内存对齐.为什么需要内存对齐? 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特 定的内存地址 ...

  4. 3d max export for unity3d

    3d max export for unity3d @by 广州小龙 1.单位问题 建模的时候,设置unity的Units Setup的单位是Meters,导出FBX文件的时候,单位为厘米(Centi ...

  5. Student's Morning

    sgu242:http://acm.sgu.ru/problem.php?contest=0&problem=242 题意:把n个人分到m组,每一组至少2个人,每个人只能属于一个组.一开始把题 ...

  6. Delphi如何让程序最小化到任务栏(截取WM_SYSCOMMAND后,调用Shell_NotifyIcon)

    现在很多的应用程序都有这样一种功能,当用户选择最小化窗口时,窗口不是象平常那样最小化到任务栏上,而是“最小化”成一个任务栏图标.象FoxMail 3.0 NetVampire 3.0等都提供了这样的功 ...

  7. eclipse配置hadoop的错误

    配置好eclipse,在执行run on hadoop的时候,提示11/03/29 16:47:59 WARN conf.Configuration: DEPRECATED: hadoop-site. ...

  8. FILTER优化

    explain plan for select a.* from fxqd_list_20131115_new_100 a where (acct_no, oper_no, seqno, trans_ ...

  9. lemon OA 下阶段工作安排

    lemon OA 下阶段工作安排 经验总结 lemon OA系统作为一个中型的java web系统,在架构上还是有着很好地可学习的地方.但是由于经验不足,过程比较迂回.如果真的有经验的话,应该可以做到 ...

  10. jQuery EasyUI + struts2.3 + mongoDB 列表查询翻页JAVA样例

    列表界面: 主要实现方式:前台组合json格式查询条件,提交至后台解析处理 一.前台搜索脚本 String.prototype.replaceAll = function (s1, s2) {     ...