10.17NOIP模拟赛
#include<iostream>
#include<cstdio>
#include<cstring> #define N 1001 using namespace std;
string s[N];
int ans[N]; inline int read()
{
int x=,f=;char c=getchar();
while(c>''||c<''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
} int main()
{
freopen("curse.in","r",stdin);
freopen("curse.out","w",stdout);
int x,y,n,l;
n=read();
for(int i=;i<=n;i++)
{
cin>>s[i];
l=s[i].length();
}
for(int i=;i<l;i++)
{
x=,y=;
for(int j=;j<=n;j++)
{
if(s[j][i]=='') x++;
else y++;
}
if(x>y) ans[i]=;
else ans[i]=;
}
for(int i=;i<l;i++) printf("%d",ans[i]);
fclose(stdin);fclose(stdout);
return ;
}
/*
当R 和 G 的大小超过了 N 时,L 的最小值就是 1,R,G 的规模就降到了 2000 以内。
显然要采用二分答案的方法。法坛的位置按照从小到大进行排序。令 dp[i][j]表示,在用了 i次红光,j 次绿光的情况下,最多从第一座法坛开始,一直摧毁到第几座法坛。
dp[i][j] = max ( P[dp[i-1][j] + 1], Q[dp[i][j-1] + 1] )。其中 P[k]表示使用一次红光,
能从第 k 座法坛向右(正向为右)连续摧毁到第几座,Q[k]表示使用一次绿光,能从第 k 座
法坛向右连续摧毁到第几座。 P 和 Q 数组可以通过预处理得到。判断 dp[R][G]的值是否为 N 即可。
*/
#include <cstdio>
#include <cstring>
#include <algorithm> #define N 2007 using namespace std; int n,p,q,a[N],l=,r,ans;
int dp[N][N],P[N],Q[N]; bool check(int L)
{
memset(dp,,sizeof(dp));
memset(P,,sizeof(P));
memset(Q,,sizeof(Q));
for (int i=;i<=n;i++)
for (int j=i;j<=n;j++)
{
if (a[j]-a[i]+<=L) P[i]=j;
if (a[j]-a[i]+<=*L) Q[i]=j;
}
P[n+]=Q[n+]=n;
for (int i=;i<=p;i++)
for (int j=;j<=q;j++)
{
if (i>) dp[i][j]=max(dp[i][j],P[dp[i-][j]+]);
if (j>) dp[i][j]=max(dp[i][j],Q[dp[i][j-]+]);
}
return dp[p][q]==n;
} int main()
{
freopen("light.in", "r", stdin);
freopen("light.out", "w", stdout);
scanf("%d%d%d", &n,&p,&q);
for (int i=;i<=n;i++)
scanf("%d",&a[i]);
sort(a+,a++n);
a[]=;
r=a[n]-a[]+;
if (p+q>=n) {printf("1\n"); return ;}
while (l<=r)
{
int mid=(l+r)/;
if (check(mid)) ans=mid,r=mid-; else l=mid+;
}
printf("%d\n",ans);
return ;
}
/*
1到n的次短路长度必然产生于:从1走到x的最短路 + edge[x][y] + y到n的最短路
首先预处理好1到每一个节点的最短路,和n到每一个节点的最短路
然后枚举每一条边作为中间边(x,y)或者(y,x),如果加起来长度等于最短路长度则跳过,否则更新。
到x的最短路 + edge[x][y] + y到n的最短路 给dist[n] 比较 找大于dist[n] 且是最小的那一个
*/
#include <cstdio>
#include <cstring>
#include <queue>
#include <algorithm> #define R 100007
#define INF 0x3f3f3f3f using namespace std;
int num,n,m;
int dist1[R],dist2[R],head[R];
bool vis[R];
struct Node
{
int v;int w;int next;
} edge[R*]; void init()
{
num=;
memset(head,-,sizeof(head));
memset(dist1,0x3f,sizeof(dist1));
memset(dist2,0x3f,sizeof(dist2));
} void add(int u,int v,int w)
{
edge[num].v=v;edge[num].w=w;
edge[num].next=head[u];head[u]=num++;
} void SPFA(int u,int *dist)
{
int i,v,w;
queue<int> Q;
memset(vis,false,sizeof(vis));
dist[u]=;vis[u]=true;Q.push(u);
while(!Q.empty())
{
u=Q.front();Q.pop();
vis[u]=false;
for(i=head[u]; i!=-; i=edge[i].next)
{
v=edge[i].v;
w=edge[i].w;
if(dist[v]>dist[u]+w)
{
dist[v]=dist[u]+w;
if(!vis[v])
{
vis[v]=true;
Q.push(v);
}
}
}
}
} int main()
{
freopen("maze.in","r",stdin);
freopen("maze.out","w",stdout);
scanf("%d%d",&n,&m);
int u,v,w;;
init();
for(int i=;i<=m;i++)
{
scanf("%d%d%d",&u,&v,&w);
add(u,v,w);add(v,u,w);
}
SPFA(,dist1);
SPFA(n,dist2);
int ans=INF;
for(int i=;i<=n;i++)
{
for(int j=head[i]; j!=-; j=edge[j].next)
{
v=edge[j].v;w=edge[j].w;
int tem=dist1[i]+dist2[v]+w;
if(tem>dist1[n] && tem<ans) ans=tem;
}
}
printf("%d\n",ans);
return ;
}
NOIP2018 模拟试题(二) 提高组
更多咨询:北京信息学窦老师QQ3377089232
NOIP2018提高组模拟题(二)
(请选手务必仔细阅读本页内容)
一.题目概况
中文题目名称 咒语 神光 迷宫
英文题目与子目录名
curse light maze
可执行文件名
curse light maze
输入文件名
curse.in light.in maze.in
输出文件名
curse.out light.out maze.out
每个测试点时限 秒 秒 秒
测试点数目 每个测试点分值 结果比较方式 全文比较(过滤行末空格及文末回车)
题目类型 传统 传统 传统
二.提交源程序文件名
对于 pascal 语言
curse.pas light.pas maze.pas
对于 C 语言
curse.c light.c maze.c
对于 C++语言
curse.cpp light.cpp maze.cpp
三.运行内存限制
内存上限
512M 512M 512M
NOIP2018 模拟试题(二) 提高组
更多咨询:北京信息学窦老师QQ3377089232
、咒语
(curse.pas/c/cpp)
【题目描述】
亮亮梦到自己来到了魔法城堡, 但一扇巨大的石门阻拦了他通向城堡内的路。
正当他沮丧之际,突然发现门上有一处机关,机关上有一张很长的纸条。
亮亮拿起纸条的一端,只见上面写着打开机关的方法: “打开机关需要念动
符咒,咒语是一串长为 L 的由 和 组成的字符串。在这张长纸条上列了 n 个
长为 L 的字符串,正确的咒语即是在纷繁的 ^L 种字符串中,与这些纸条上的
字符串相异度之和最小,并且在满足这一条件下, 的个数最多的字符串。两个
字符串的相异度定义为对应位置不相等的字符对的个数。如‘’和‘’的
相异度为 ,因为它们有且只有第二个位置上的字符不相等。”
亮亮拉起纸条,只觉得纸条似乎永远也拉不完。这上面有着数以万计的字符
串,而每一个字符串的长度也或百或千,以人力看来是无法得到正确的咒语。你
能帮帮他,让他得以进入魔法城堡,一窥其中的奥秘吗?
【输入格式】
第一行为一个数字 N 。
接下来的 N 行, 每行为一个长为 L 的 字符串。 数据保证 N 个字符串等长。
【输出格式】
只有一行,是一个长为 L 的字符串 S,即为正确的咒语。
【样例输入】 【样例输出】 【数据规模】
对于 %的数据,N<=;
对于 %的数据,N<=;
对于 %的数据,<=N<=,<=L<=。
NOIP2018 模拟试题(二) 提高组
更多咨询:北京信息学窦老师QQ3377089232
、神光
(light.pas/c/cpp)
【题目描述】
亮亮成功地念出了咒语,石门缓缓地自动移开,一道道绚丽的神光从城堡内
激射而出。亮亮好奇而又兴奋地走入了城堡中,迎面有一座极长的魔法阵。
魔法阵可以看作一条直线,它被均匀地分成了 个位置,一个位
置可以看成是一个格子。有些位置上筑有法坛,一共 N座。亮亮只有破了眼前
的魔法阵,才能继续前进,而欲破法阵,必须毁掉所有的法坛。
亮亮身前有两根法杖:一根颜色血红,能发红色神光,光芒可以笼罩连续 L
个位置,并摧毁这 L 个位置上所有的法坛,最多使用 R 次;另一根颜色碧绿,
能发绿色神光,光芒可以笼罩连续 2L 个位置,并摧毁这 2L 个位置上所有的法
坛,最多使用 G 次。
法杖的神奇之处在于,L 的值必须由亮亮事先设定好,并且一经设定,便无
法更改。亮亮需要在规定的次数下摧毁所有法坛,并且使得 L 最小。
【输入格式】
第一行三个整数 N, R, G。
第 i (<=i<=n+) 行一个整数
i
A ,表示第 i 座法坛的位置。
【输出格式】
只有一个整数,表示L 的最小值。
【样例输入】 【样例输出】 【样例解释】
亮亮将 L 设为 ,并用红色神光笼罩 - 位置,用绿色神光笼罩 - 位置。
【数据规模】
对于50%的数据,N <= ;
对于100%的数据, <= N <= , <= R, G,
i
A <= ,,,。
NOIP2018 模拟试题(二) 提高组
更多咨询:北京信息学窦老师QQ3377089232
、迷宫
(maze.pas/c/cpp)
【题目描述】
破了魔法阵后,亮亮进入了一座迷宫。这座迷宫叫做“梦境迷宫” ,亮亮只
有走出这座迷宫,才能从睡梦中醒来。
梦境迷宫可以用无向图来表示。它共有 n 个点和 m 条双向道路,每条道路
都有边权,表示通过这条道路所需的时间,且每条道路可以多次经过。亮亮位于
一号点,而出口则是 n 号点。原本,亮亮该找到一条最短路,快速冲出迷宫,然
而,梦境迷宫的特殊之处在于,如果沿着最短路到达出口,亮亮就会永远陷入梦
境。因此,亮亮必须寻找一条次短路。次短路的长度须严格大于最短路(可以有
多条)的长度,同时又不大于所有除最短路外的道路的长度。
你的任务,就是编写一个程序,帮助亮亮找到通向出口的次短路。
【输入格式】
第一行有两个整数 n、m,表示迷宫内共有 n 个点,m 条边。
接下来 m 行,每行三个整数 x、y、z,表示结点 x 和 y 之间连有一条边权为
z 的无向边。
【输出格式】
一个整数,表示次短路的长度。
【样例输入】 【样例输出】 【样例解释】
最短路: -> -> (长度为 +=)
次短路: -> -> -> (长度为 ++=)
【数据规模】
对于 %的数据, <= n <= , <= m <= ,。
对于 %的数据, <= z <= ,z 表示无向边的边长。
题面
10.17NOIP模拟赛的更多相关文章
- 2018.10.17NOIP模拟赛解题报告
心路历程 预计得分:\(100 + 100 +100\) 实际得分:\(100 + 100 + 60\) 辣鸡模拟赛.. 5min切掉T1,看了一下T2 T3,感觉T3会被艹爆因为太原了.. 淦了20 ...
- [10.18模拟赛] 序列 (DP)
[10.18模拟赛] 序列 题目描述 山山有一个整数序列s1,s2,-,sn,其中1≤si≤k. 求出有多少个准确移除m个元素后不同的序列.答案模(1e9+7) 输入 输入包括几个测试用例,并且由文件 ...
- [10.12模拟赛] 老大 (二分/树的直径/树形dp)
[10.12模拟赛] 老大 题目描述 因为 OB 今年拿下 4 块金牌,学校赞助扩建劳模办公室为劳模办公室群,为了体现 OI 的特色,办公室群被设计成了树形(n 个点 n − 1 条边的无向连通图), ...
- EZ 2018 06 10 NOIP2018 模拟赛(十八)
好久没写blog&&比赛题解了,最近补一下 这次还是很狗的,T3想了很久最后竟然连并查集都忘写了,然后T2map莫名爆炸. Rating爆减......链接不解释 好了我们开始看题. ...
- 洛谷P1667/[10.22 模拟赛] 数列 (思维+模拟)
洛谷P1667 数列 题目描述 给定一个长度是n的数列A,我们称一个数列是完美的,当且仅当对于其任意连续子序列的和都是正的.现在你有一个操作可以改变数列,选择一个区间[X,Y]满足\(A_X +A_{ ...
- 2018.10.23NOIP模拟赛解题报告
心路历程 预计得分:\(100 + 50 + (10 \sim 50)\) 实际得分:\(100 + 10 + 50\) 这可能是我打的最懵逼的一场考试没有之一.. T1两个小时才做出来也是醉了. T ...
- 17.2.10 NOIP模拟赛 聪哥的工资
聪哥的工资 (money/money.in/money.out) 时限1000ms 内存256MB 题目描述 lwher: 了体验劳苦大众的生活,聪哥在暑假参加了打零工的活动,这个活动分为n个工作日, ...
- 2019.10.18模拟赛T3
题目大意: 求$\sum\limits_{i=1}^n\sum\limits_{j=1}^n[lcm(i,j)>n](n\leq 10^{10})$的值. 题解: 这题貌似有n多种做法... 为 ...
- 2019.10.02模拟赛T3
题目大意: 设$S(n,m)$为第二类斯特林数,$F_i$表示斐波那契数列第$i$项. 给定$n,R,K$,求$\sum\limits_{i=1}^{n}(\sum\limits_{m=1}^{R}F ...
随机推荐
- STM32F407 串口通信实验 第26节 个人笔记
前言 这篇笔记对应正点原子STM32F407探索者 ,教学视频第26节,网址如下: https://ke.qq.com/webcourse/index.html#cid=279403&term ...
- 慕课笔记利用css进行布局【两列布局】
<html> <head> <title>两列布局</title> <style type="text/css"> bo ...
- NYOJ-476谁是英雄,分解质因子求约数个数!
谁是英雄 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 十个数学家(编号0-9)乘气球飞行在太平洋上空.当横越赤道时,他们决定庆祝一下这一壮举.于是他们开了一瓶香槟.不 ...
- [luoguP1472] 奶牛家谱 Cow Pedigrees(DP)
传送门 一个深度为i的树可以由一个根节点外加两个深度为i-1的树组成,这就决定了DP该怎么写. 然而我真的没有想到. f[i][j]表示深度为i节点数为j的个数 sum[i][j]表示深度小于等于i节 ...
- SPOJ 3261 (树套树傻逼题)
As another one of their crazy antics, the N (1 ≤ N ≤ 100,000) cows want Farmer John to race against ...
- Sumdiv(poj1845)
题意:求A^B的因子的和. /* 首先将A分解 A=p1^a1*p2^a2*...*pn*an A^B=p1^a1B*p2^a2B*...*pn*anB 因子之和sum=(1+p1+p1^2+...+ ...
- [NOIP2005] 提高组 洛谷P1053 篝火晚会
题目描述 佳佳刚进高中,在军训的时候,由于佳佳吃苦耐劳,很快得到了教官的赏识,成为了“小教官”.在军训结束的那天晚上,佳佳被命令组织同学们进行篝火晚会.一共有n个同学,编号从1到n.一开始,同学们按照 ...
- 一 hadoop 相关介绍
hadoop 相关介绍 hadoop的首页有下面这样一段介绍.对hadoop是什么这个问题,做了简要的回答. The Apache™ Hadoop® project develops open-sou ...
- springMVC多数据源使用 跨库跨连接
原文:http://blog.itpub.net/9399028/viewspace-2106641/ http://blog.csdn.net/a973893384/article/details/ ...
- Linux学习系列之MySQL备份
MySQL排除表备份 #!/bin/bash #created by 90root #date: 20160809 date_y=$(date +%Y) date_m=$(date +%m) time ...