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模拟赛的更多相关文章

  1. 10.16 NOIP模拟赛

    目录 2018.10.16 NOIP模拟赛 A 购物shop B 期望exp(DP 期望 按位计算) C 魔法迷宫maze(状压 暴力) 考试代码 C 2018.10.16 NOIP模拟赛 时间:2h ...

  2. 2018.10.16 NOIP模拟赛解题报告

    心路历程 预计得分:\(100 + 100 + 20 = 220\) 实际得分:\(100 + 100 + 30 = 230\) 辣鸡模拟赛.. T1T2都是一眼题,T3考验卡常数还只有一档暴力分. ...

  3. 2016.10.30 NOIP模拟赛 day2 AM 整理

    题目+数据:链接:http://pan.baidu.com/s/1gfBg4h1 密码:ho7o 总共得了:130分, 1:100分  2:30分(只会这30分的暴力) 3:0(毫无思路) 虽然不高, ...

  4. 2016.10.30 NOIP模拟赛 day2 PM 整理

    满分:300分 直接全部爆零,真的是很坑啊! 10.30的题目+数据:链接:http://pan.baidu.com/s/1jHXLace 密码:i784 T1: 题目中的难点就是每次折叠的点可能应经 ...

  5. 2017 10.25 NOIP模拟赛

    期望得分:100+40+100=240 实际得分:50+40+20=110 T1 start取了min没有用,w(゚Д゚)w    O(≧口≦)O T3 代码3个bug :数组开小了,一个细节没注意, ...

  6. 2018.10.03 NOIP+ 模拟赛 解题报告

    得分: \(30+5+0=35\)(考得真不咋滴) \(T1\):奥义商店(点此看题面) 以为很简单,对着这题想了一个多小时,最后果断打了个暴力交了... ... 看完题解发现其实也不是很难. 对于\ ...

  7. 2018.10.30 NOIp模拟赛 T1 改造二叉树

    [题目描述] 小Y在学树论时看到了有关二叉树的介绍:在计算机科学中,二叉树是每个结点最多有两个子结点的有序树.通常子结点被称作“左孩子”和“右孩子”.二叉树被用作二叉搜索树和二叉堆.随后他又和他人讨论 ...

  8. 2016.10.29 NOIP模拟赛 PM 考试整理

    300分的题,只得了第三题的100分. 题目+数据:链接:http://pan.baidu.com/s/1o7P4YXs 密码:4how T1:这道题目存在着诸多的问题: 1.开始的序列是无法消除的( ...

  9. 2018.10.17 NOIP模拟 管道(状压dp)

    传送门 状压dp好题. 怎么今天道道题都有点东西啊 对于今天题目神仙出题人先膜为上策:%%%%DzYoAk_UoI%%%% 设f[i][j]f[i][j]f[i][j]表示选取点的状态集合为iii,当 ...

随机推荐

  1. SpringBoot PUT请求

    (1)配置HiddenHttpMethodFilter(SpringMVC需要配置,SpringBoot已经为我们自动配置了) (2)在视图页面创建一个Post Form表单,在表单中创建一个inpu ...

  2. 【转】深入浅出JMS(一)--JMS基本概念

    摘要 The Java Message Service (JMS) API is a messaging standard that allows application components bas ...

  3. sqlserver2008 链接服务器 2000

    背景 这个项目就有意思了,我用的是sqlserver2008,对方用的是sqlserver2000,还装在windows2000上,是个很老的系统了.两方要对接,对方技术太菜,自己竟然不会转2000. ...

  4. zabbix添加对自定义无规则的关键日志文件的监控

    zabbix添加对自定义无规则日志文件的监控 项目背景及思路: zabbix自带有针对日志文件的监控,自带的监控只能监控到指定文件或者正则匹配的固定日志文件,但当需要监控的文件名没有规律的时候自带监控 ...

  5. Android 图片平铺效果

    我们大家都看过平铺的效果,那么我们都是怎么样才能实现的那,我们其实主要用到的就是api,我们一开始new一个bitmap,就可以了,但是,大家都没有想过,我们还可以用什么方法来做这个事情那,那么我们就 ...

  6. JQ初学总结一

    Jquery是最火的JavaScript库,大部分web开发都会用到就jquery,而作为初学者看了一些jq的用法总结自己的学习以增强自己的认知. 普通的javascript的缺点是:每种控件的操作方 ...

  7. gulp自动化构建教程

    gulp及gulpfile.js编写示例    本文主要记录一个gulpfile.js示例,以免以后用的时候遗忘.但首先还是要了解gulp是什么以及如何使用. 一.什么是gulp 简单来说:就是压缩前 ...

  8. Redis的Multi的内幕真相

    今天遇到个Redis奇慢的问题,断点分析发现跟multi有关. 由于本人太忙不想去阅读Redis Server的源代码(其实是懒),就通过TCPDump来分析吧. 步骤: 1. 先在Redis Ser ...

  9. 基于MFC的ActiveX控件开发教程------------浏览器插件之ActiveX开发

    浏览器插件之ActiveX开发(一) 一般的Web应用对于浏览器插件能不使用的建议尽量不使用,因为其涉及到安全问题以及影响用户安装(或自动下载注册安装)体验问题.在有特殊需求(如涉及数据安全的金融业务 ...

  10. php中0,空,null和false之间区别

    $a = 0; $b="0"; $c= ''; $d= null; $e = false; echo "5个变量-原始测试类型"; var_dump($a);/ ...