10.17 NOIP模拟赛
2018.10.17 NOIP模拟赛
时间:1h15min(实际)
期望得分:100+100+100
实际得分:100+70+100
为什么这么困啊。。
A 咒语curse
#include <cstdio>
#include <cctype>
#include <cstring>
#include <algorithm>
#define gc() getchar()
typedef long long LL;
const int N=1005;
int tm[N];
char s[N],ans[N];
inline int read()
{
int now=0;register char c=gc();
for(;!isdigit(c);c=gc());
for(;isdigit(c);now=now*10+c-'0',c=gc());
return now;
}
int main()
{
freopen("curse.in","r",stdin);
freopen("curse.out","w",stdout);
int n=read();
scanf("%s",s+1); int len=strlen(s+1);
for(int j=1; j<=len; ++j) if(s[j]=='0') ++tm[j];
for(int i=2; i<=n; ++i)
{
scanf("%s",s+1);
for(int j=1; j<=len; ++j) if(s[j]=='0') ++tm[j];
}
for(int i=1; i<=len; ++i)
if(tm[i]>=n-tm[i]) ans[i]='0';
else ans[i]='1';
ans[len+1]='\0', puts(ans+1);
return 0;
}
B 神光light(二分 DP)
\(f[i][j]\)表示用了\(i\)次红光\(j\)次绿光最远能到达哪个点。预处理之后转移即可。
考试的时候很困,很sb的写了\(O(n)\)贪心。。
#include <cstdio>
#include <cctype>
#include <cstring>
#include <algorithm>
#define gc() getchar()
typedef long long LL;
const int N=2005;
int n,A,B,pos[N];
inline int read()
{
int now=0;register char c=gc();
for(;!isdigit(c);c=gc());
for(;isdigit(c);now=now*10+c-'0',c=gc());
return now;
}
int Calc(int x,int len)
{
int l=x,r=n,mid,ans=l; x=pos[x];//!
while(l<=r)
if(pos[mid=l+r>>1]-x+1<=len) ans=mid,l=mid+1;
else r=mid-1;
return ans;
}
bool Check(int len)
{
static int f[N][N],p1[N],p2[N];
for(int i=1; i<=n; ++i)
p1[i]=Calc(i,len), p2[i]=Calc(i,len<<1);
memset(f,0,sizeof f);
f[0][0]=0/*not 1...*/, p1[n+1]=p2[n+1]=n;
for(int i=0; i<=A; ++i)
for(int j=0; j<=B; ++j)
f[i+1][j]=std::max(f[i+1][j],p1[f[i][j]+1]), f[i][j+1]=std::max(f[i][j+1],p2[f[i][j]+1]);
return f[A][B]>=n;
}
int main()
{
freopen("light.in","r",stdin);
freopen("light.out","w",stdout);
n=read(),A=std::min(n,read()),B=std::min(n,read());
if(A+B>=n) return puts("1"),0;
for(int i=1; i<=n; ++i) pos[i]=read();
std::sort(pos+1,pos+1+n);
int l=1,r=pos[n]-pos[1]+1,mid,ans=r;
while(l<=r)
{
if(Check(mid=l+r>>1)) ans=mid,r=mid-1;
else l=mid+1;
}
printf("%d\n",ans);
return 0;
}
C 迷宫maze(次短路)
枚举每一条边\((u,v,w)\),\(次短路 = 1到u的最短路 + w + v到n的最短路\)。
因为次短路与最短路相比会有一段绕路,且不会有两次绕路。
这题边可以多次走,所以不存在次短路时要多走两次最短路上边权最小的边。
忘了这个问题,但数据水过了,不改了。
辣鸡题解还是个DFS,出\(n=5000\)。
#include <queue>
#include <cstdio>
#include <cctype>
#include <cstring>
#include <algorithm>
#define mp std::make_pair
#define pr std::pair<int,int>
#define gc() getchar()
typedef long long LL;
const int N=5005,M=2e5+5;
int Enum,H[N],nxt[M],fr[M],to[M],len[M],ds[N],dt[N];
inline int read()
{
int now=0;register char c=gc();
for(;!isdigit(c);c=gc());
for(;isdigit(c);now=now*10+c-'0',c=gc());
return now;
}
inline void AE(int w,int u,int v)
{
to[++Enum]=v, fr[Enum]=u, nxt[Enum]=H[u], H[u]=Enum, len[Enum]=w;
to[++Enum]=u, fr[Enum]=v, nxt[Enum]=H[v], H[v]=Enum, len[Enum]=w;
}
void Dijkstra(int s,int *dis)
{
static bool vis[N];
static std::priority_queue<pr> q;
memset(vis,0,sizeof vis);
memset(dis,0x3f,sizeof ds);
dis[s]=0, q.push(mp(0,s));
while(!q.empty())
{
int x=q.top().second; q.pop();
if(vis[x]) continue;
vis[x]=1;
for(int i=H[x]; i; i=nxt[i])
if(dis[to[i]]>dis[x]+len[i]) q.push(mp(-(dis[to[i]]=dis[x]+len[i]),to[i]));
}
}
int main()
{
freopen("maze.in","r",stdin);
freopen("maze.out","w",stdout);
int n=read(),m=read();
for(int i=1; i<=m; ++i) AE(read(),read(),read());
Dijkstra(1,ds), Dijkstra(n,dt);
int ans=2e9,Min=ds[n];
for(int i=1,tmp; i<=Enum; ++i)
if((tmp=ds[fr[i]]+dt[to[i]]+len[i])>Min) ans=std::min(ans,tmp);
printf("%d\n",ans);
return 0;
}
考试代码
B
#include <cstdio>
#include <cctype>
#include <algorithm>
#define gc() getchar()
typedef long long LL;
const int N=1e5+5;//2005;
int n,A,B,pos[N],L[N],R[N];
inline int read()
{
int now=0;register char c=gc();
for(;!isdigit(c);c=gc());
for(;isdigit(c);now=now*10+c-'0',c=gc());
return now;
}
bool Check(int len)
{
int now=1,cnt=1; L[1]=pos[1];
while(now<n)
{
if(pos[now+1]-L[cnt]+1>len)
R[cnt]=pos[now], L[++cnt]=pos[++now];
else ++now;
}
R[cnt]=pos[n];
if(cnt<=A) return 1;
int rest=cnt-A,used=0;
for(int i=2; i<=cnt; ++i)
if(R[i]-L[i-1]+1<=2*len)
{
++used, rest-=2, ++i;
if(used>B) return 0;
if(rest<=0) return 1;
}
return rest-B+used<=0;
}
int main()
{
// freopen("light5.in","r",stdin);
// freopen("light.out","w",stdout);
n=read(),A=read(),B=read();
for(int i=1; i<=n; ++i) pos[i]=read();
std::sort(pos+1,pos+1+n);
int l=1,r=1e9,mid,ans=1e9;
while(l<=r)
{
if(Check(mid=l+r>>1)) ans=mid,r=mid-1;
else l=mid+1;
}
printf("%d\n",ans);
return 0;
}/*
7 1 2
1
3
5
7
9
11
21
*/
10.17 NOIP模拟赛的更多相关文章
- 10.16 NOIP模拟赛
目录 2018.10.16 NOIP模拟赛 A 购物shop B 期望exp(DP 期望 按位计算) C 魔法迷宫maze(状压 暴力) 考试代码 C 2018.10.16 NOIP模拟赛 时间:2h ...
- 2018.10.16 NOIP模拟赛解题报告
心路历程 预计得分:\(100 + 100 + 20 = 220\) 实际得分:\(100 + 100 + 30 = 230\) 辣鸡模拟赛.. T1T2都是一眼题,T3考验卡常数还只有一档暴力分. ...
- 2016.10.30 NOIP模拟赛 day2 AM 整理
题目+数据:链接:http://pan.baidu.com/s/1gfBg4h1 密码:ho7o 总共得了:130分, 1:100分 2:30分(只会这30分的暴力) 3:0(毫无思路) 虽然不高, ...
- 2016.10.30 NOIP模拟赛 day2 PM 整理
满分:300分 直接全部爆零,真的是很坑啊! 10.30的题目+数据:链接:http://pan.baidu.com/s/1jHXLace 密码:i784 T1: 题目中的难点就是每次折叠的点可能应经 ...
- 2017 10.25 NOIP模拟赛
期望得分:100+40+100=240 实际得分:50+40+20=110 T1 start取了min没有用,w(゚Д゚)w O(≧口≦)O T3 代码3个bug :数组开小了,一个细节没注意, ...
- 2018.10.03 NOIP+ 模拟赛 解题报告
得分: \(30+5+0=35\)(考得真不咋滴) \(T1\):奥义商店(点此看题面) 以为很简单,对着这题想了一个多小时,最后果断打了个暴力交了... ... 看完题解发现其实也不是很难. 对于\ ...
- 2018.10.30 NOIp模拟赛 T1 改造二叉树
[题目描述] 小Y在学树论时看到了有关二叉树的介绍:在计算机科学中,二叉树是每个结点最多有两个子结点的有序树.通常子结点被称作“左孩子”和“右孩子”.二叉树被用作二叉搜索树和二叉堆.随后他又和他人讨论 ...
- 2016.10.29 NOIP模拟赛 PM 考试整理
300分的题,只得了第三题的100分. 题目+数据:链接:http://pan.baidu.com/s/1o7P4YXs 密码:4how T1:这道题目存在着诸多的问题: 1.开始的序列是无法消除的( ...
- 2018.10.17 NOIP模拟 管道(状压dp)
传送门 状压dp好题. 怎么今天道道题都有点东西啊 对于今天题目神仙出题人先膜为上策:%%%%DzYoAk_UoI%%%% 设f[i][j]f[i][j]f[i][j]表示选取点的状态集合为iii,当 ...
随机推荐
- SpringBoot使用外置的Servlet容器
SpringBoot默认使用嵌入式的Servlet容器,应用打包成可执行的jar包 优点:简单.便携 缺点:默认不支持jsp,优化定制比较复杂(使用定制器serverProperties.自定义Emb ...
- linux中结构体对齐【转】
转自:https://blog.csdn.net/suifengpiao_2011/article/details/47260085 linux中定义对齐字节 typedef struct sdk_ ...
- CentOS7 虚拟机设置文件共享 VMWareTools安装遇到的坑
设置文件共享的前提条件是已经安装好VMware Tools. 现在从安装VMware Tools开始讲起: 第一步:安装VMware Tools (如果安装的centos是最小安装,需要提前安装组件g ...
- oracle 数据库链路
Oracle数据库链路的建立和使用 一.数据库链路的建立: 1.数据库链路的建立语法一般是:CREATE DATABASE LINK[db_link_name] CONNECT TO [user_na ...
- 【前端】js截取or分割字符串的常见方法
1.截取字符串 分割字符串方法 1.charAt(): 没有一种有别于字符串类型的字符数据类型,所以返回的字符是长度为 1 的字符串 例如:var str="Hello world!&quo ...
- TomCat安装配置教程
一.JDK的安装与配置 1.从官网下载jdk,注意是jdk不是jre.最好从官网下载,也可以直接度娘. 2.下载完毕后,安装jdk,直接按照安装向导的提示安装即可,安装时可以自己选择安装路径,我的安 ...
- java比较两个对象是否相等?
1.判断两个对象是否是同一个引用对象则用==,"=="比的是地址.因为如果地址相同,则就是同一个对象(java中如果两对象(obj1,obj2)相等,那么在修改obj2的时候,ob ...
- sharding-jdbc结合mybatis实现分库分表功能
最近忙于项目已经好久几天没写博客了,前2篇文章我给大家介绍了搭建基础springMvc+mybatis的maven工程,这个简单框架已经可以对付一般的小型项目.但是我们实际项目中会碰到很多复杂的场景, ...
- python 全栈开发,Day133(玩具与玩具之间的对话,基于jieba gensim pypinyin实现的自然语言处理,打包apk)
先下载github代码,下面的操作,都是基于这个版本来的! https://github.com/987334176/Intelligent_toy/archive/v1.6.zip 注意:由于涉及到 ...
- python 全栈开发,Day107(CRM初始,权限组件之权限控制,权限系统表设计)
一.CRM初始 CRM,客户关系管理系统(Customer Relationship Management).企业用CRM技术来管理与客户之间的关系,以求提升企业成功的管理方式,其目的是协助企业管理销 ...