水灾(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

/*以后养成好习惯 写暴力对拍(可我老是写错暴力...)*/
#include<iostream>
#include<cstdio>
#include<cstring>
#define inf 0x3f3f3f3f
using namespace std;
int n,a[],ans=-inf;
void Dfs(int now,int num,int s){
if(now==n+){
if(num==)ans=max(ans,s);
return;
}
Dfs(now+,num,s);
Dfs(now+,num,s+a[now]);
Dfs(now+,num+,s+a[now]);
Dfs(now+,num+,s);
}
int main()
{
freopen("jx.in","r",stdin);
freopen("jx.out","w",stdout);
scanf("%d",&n);
for(int i=;i<=n;i++)
scanf("%d",&a[i]);
Dfs(,,);
printf("%d\n",ans);
return ;
} #include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 1000010
using namespace std;
int n,a[maxn],f[maxn][][];
int main()
{
freopen("jx.in","r",stdin);
freopen("jx.out","w",stdout);
scanf("%d",&n);
for(int i=;i<=n;i++)
scanf("%d",&a[i]);
memset(f,-/,sizeof(f));
f[][][]=;
for(int i=;i<=n;i++)
for(int j=;j<=;j++){
f[i][j][]=max(f[i-][j][],f[i-][j][]);
if(j)f[i][j][]=max(f[i-][j-][],f[i-][j-][])+a[i];
f[i][j][]=max(f[i][j][],f[i-][j][]+a[i]);
}
printf("%d\n",max(f[n][][],f[n][][]));
}

密码锁 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。

 机智的题解

/*
完全没思路的 我是蒟蒻QAQ
看了题解 好巧妙Qrz
对于区间取反 复杂度是O(n)
但是因为这题序列只有01
如果操作查分序列的话就快多了
先搞出查分序列 然后bfs求出每两个点的1相互抵消最少操作次数
因为最后的序列最多20个1 所以状丫dp搞一搞求出min操作次数
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#define maxn 10010
using namespace std;
int n,m,k,size[],a[maxn],c[maxn],s[maxn],cnt,step[][];
int f[maxn],dis[maxn],dp[<<],inf;
struct node{
int x,t;
};
queue<node>q;
void Bfs(int S,int o){
while(!q.empty())q.pop();
memset(f,,sizeof(f));
memset(dis,/,sizeof(dis));
inf=dis[];
q.push((node){S,});f[S]=;dis[S]=;
while(!q.empty()){
node p=q.front();q.pop();
for(int i=;i<=k;i++){
int y=p.x+size[i];
if(y<=n&&f[y]==){
f[y]=;dis[y]=p.t+;
q.push((node){y,dis[y]});
}
y=p.x-size[i];
if(y>=&&f[y]==){
f[y]=;dis[y]=p.t+;
q.push((node){y,dis[y]});
}
}
}
for(int i=;i<=cnt;i++)
if(dis[c[i]]<inf)step[o][i]=dis[c[i]];
else step[o][i]=inf;
}
int main()
{
freopen("password.in","r",stdin);
freopen("password.out","w",stdout);
scanf("%d%d%d",&n,&m,&k);
for(int i=;i<=m;i++){
int x;scanf("%d",&x);a[x]++;
}
for(int i=;i<=k;i++)
scanf("%d",&size[i]);
n++;
for(int i=;i<=n;i++)
s[i]=a[i]-a[i-];
for(int i=;i<=n;i++)
if(s[i])c[++cnt]=i;
for(int i=;i<=cnt;i++)
Bfs(c[i],i);
memset(dp,/,sizeof(dp));
inf=dp[];dp[]=;
for(int i=;i<=(<<cnt)-;i++){
int j;
for(int k=;k<=cnt;k++)
if((<<k-)&i){j=k;break;}
for(int k=;k<=cnt;k++)
if((<<k-)&i)dp[i]=min(dp[i],dp[i^(<<j-)^ (<<k-)]+step[j][k]);
}
if(dp[(<<cnt)-]==inf)printf("-1\n");
else printf("%d\n",dp[(<<cnt)-]);
return ;
}

conclusion

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

 

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. JSP中使用的模式——JSP+Servlet+JavaBean

    上一篇博文写到模式一:JSP+JavaBean 链接地址:http://wxmimperio.coding.io/?p=155 JSP中两种模式的总结 链接地址:http://wxmimperio.c ...

  2. Coursera《machine learning》--(6)逻辑回归

    六 逻辑回归(Logistic Regression:LR) 逻辑回归(Logistic Regression, LR)模型其实仅在线性回归的基础上,套用了一个逻辑函数,但也就是由于这个逻辑函数,使得 ...

  3. Spring4.0整合Hibernate3 .6

    转载自:http://greatwqs.iteye.com/blog/1044271 6.5  Spring整合Hibernate 时至今日,可能极少有J2EE应用会直接以JDBC方式进行持久层访问. ...

  4. GCD介绍(一): 基本概念和Dispatch Queue

    什么是GCD? Grand Central Dispatch或者GCD,是一套低层API,提供了一种新的方法来进行并发程序编写.从基本功能上讲,GCD有点像NSOperationQueue,他们都允许 ...

  5. uva 1428 - Ping pong

    树状数组,把他们的技能值作为轴: 首先按照编号从小到大插入值,这样就可以得到,技能值比当前小的人数: 然后按照编号从大到小再插一遍: 代码: #include<cstdio> #inclu ...

  6. PYTHON调用JENKINS的API来进行CI

    我查到的相关API有两套,我主要用的是python-jenkins. https://pypi.python.org/pypi/python-jenkins/ 按语法调用即可... import je ...

  7. 删除数据表和清空数据表的内容(保存表结构)的SHELL脚本

    A,删除指定数据库的所有数据表 #!/bin/bash # 删除mysql中所有表 # 示例: # Usage: ./script user password dbnane # Usage: ./sc ...

  8. java基础随笔-内部类

    今天来复习下内部类的一些基础知识. 首先是内部类的分类: 1.成员内部类 2.静态内部类 3.匿名内部类 4.局部内部类 下面逐一来介绍下. 首先是成员内部类,就是将内部类作为一个成员变量来处理.具体 ...

  9. 14.7.1 Resizing the InnoDB System Tablespace InnoDB 系统表空间大小

    14.7.1 Resizing the InnoDB System Tablespace InnoDB 系统表空间大小 这个章节描述如何增加或者减少 InnoDB 系统表空间的大小 增加InnoDB ...

  10. DD-WRT相关资源

    版本网站下载:Other Downloads,进入betas->2014 FTP下载:如ftp://ftp.dd-wrt.com/betas/2014/06-23-2014-r24461/ Re ...