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集成Spring Security(授权与认证)

    ⒈添加starter依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifact ...

  2. SpringBoot使用外置的Servlet容器

    SpringBoot默认使用嵌入式的Servlet容器,应用打包成可执行的jar包 优点:简单.便携 缺点:默认不支持jsp,优化定制比较复杂(使用定制器serverProperties.自定义Emb ...

  3. tomcat6和tomcat7管理用户manager配置

    tomcat用户登录文件配置 如果想要对部署在tomcat上的项目进行管理查看,需要在tomcat安装目录conf文件夹下的tomcat-user.xml里添加用户登录权限.具体添加的内容如下: To ...

  4. Ex 6_2 假设您准备一次长途旅行..._第五次作业

    假设n个旅馆距离原点的距离存放在数组arr[0. . .n-1]中,punish[0. . .n-1]表示在某个旅馆停留时所受的的惩罚的最小值.当然在第一个旅馆停留时所受到的惩罚为0,即punish[ ...

  5. process.cwd()与__dirname的区别

    process.cwd() 是当前执行node命令时候的文件夹地址 ——工作目录,保证了文件在不同的目录下执行时,路径始终不变__dirname 是被执行的js 文件的地址 ——文件所在目录 Node ...

  6. MySQL数据库排序选择的作用和该如何选择编码格式

    前言:在创建数据库的时候,会有这样一个选项->排序规则,平时在创建数据库的时候并没有注意,只是选择了默认,也没感觉有什么问题,今天看到这个突然好奇起来,所以看了一些资料做了以下的一些总结,若有错 ...

  7. hdu4052矩形面积并

    建模需要注意下细节,,这是做扫描线的惯例,就是最好把模型建立在笛卡尔坐标系上 剩下的看链接和注释https://blog.csdn.net/shiqi_614/article/details/7983 ...

  8. 模拟js中注册表单验证

    示例1 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...

  9. 向集合中添加自定义类型--建议在自定义类型的时候要重写equals方法

    package com.bjpowernode.t01list; import java.util.ArrayList; /* * 向集合中添加自定义类型 */public class TestLis ...

  10. C# mongoDB Driver 使用对象方式查询语法大全

    #region 查询方法 /// <summary> /// 获取单个对象 /// </summary> /// <typeparam name="T" ...