NOIP2014题解
NOIP2014题解
Day1
生活大爆炸版石头剪刀布 rps
简单模拟题,注意细节
#include<iostream>
#include<cstdio>
using namespace std;
inline int read()
{
int x=0;bool t=false;char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
if(ch=='-')t=true,ch=getchar();
while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
return t?-x:x;
}
int ans[5][5]={0,-1,1,1,-1,1,0,-1,1,-1,-1,1,0,-1,1,-1,-1,1,0,1,1,1,-1,-1,0};
int n,na,nb,a[500],b[500],A,B;
int main()
{
n=read();na=read();nb=read();
for(int i=0;i<na;++i)a[i]=read();
for(int i=0;i<nb;++i)b[i]=read();
for(int i=0;i<n;++i)
{
int d=ans[a[i%na]][b[i%nb]];
if(d==1)A+=1;if(d==-1)B+=1;
}
printf("%d %d\n",A,B);
return 0;
}
联合权值 link
可以说非常简单了,先算出每个点周围点的权值和,在计算它们的平方和。
答案就是权值和的平方减去平方和。
#include<iostream>
#include<cstdio>
using namespace std;
#define MOD 10007
#define MAX 200200
inline int read()
{
int x=0;bool t=false;char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
if(ch=='-')t=true,ch=getchar();
while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
return t?-x:x;
}
struct Line{int v,next;}e[MAX<<1];
int h[MAX],cnt=1;
inline void Add(int u,int v){e[cnt]=(Line){v,h[u]};h[u]=cnt++;}
int n,W[MAX],ans,S[MAX],SS[MAX];
int main()
{
n=read();
for(int i=1;i<n;++i)
{
int u=read(),v=read();
Add(u,v);Add(v,u);
}
for(int i=1;i<=n;++i)W[i]=read();
for(int u=1;u<=n;++u)
{
int mx=0,mxx=0;
for(int i=h[u];i;i=e[i].next)
{
int v=e[i].v;S[u]=(S[u]+W[v])%MOD;SS[u]=(SS[u]+W[v]*W[v])%MOD;
if(W[v]>mx)mxx=mx,mx=W[v];
else if(W[v]>mxx)mxx=W[v];
}
ans=max(ans,mx*mxx);
}
printf("%d ",ans);
ans=0;
for(int i=1;i<=n;++i)ans=(ans+S[i]*S[i])%MOD;
for(int i=1;i<=n;++i)ans=(ans+MOD-SS[i])%MOD;
printf("%d\n",ans);
return 0;
}
飞扬的小鸟 bird
不错的\(dp\)题。
设\(f[i][j]\)表示到达\((i,j)\)位置的最小步数。
转移很显然,类似背包可以不用枚举向上飞的次数。
注意先转移向上飞,因为你至少要飞一次,所以先从\(i-1\)转移飞一次,再在\(i\)行内背包转移。
转移完之后再转移下降的情况。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define MAX 10010
inline int read()
{
int x=0;bool t=false;char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
if(ch=='-')t=true,ch=getchar();
while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
return t?-x:x;
}
int n,m,K,L[MAX],H[MAX],X[MAX],Y[MAX];
int f[MAX][1010],inf;
void cmin(int &x,int y){if(x>y)x=y;}
int main()
{
n=read();m=read();K=read();
for(int i=1;i<=n;++i)X[i]=read(),Y[i]=read();
for(int i=1;i<=n;++i)L[i]=0,H[i]=m+1;
for(int i=1;i<=K;++i)
{
int p=read();
L[p]=read();H[p]=read();
}
memset(f,63,sizeof(f));inf=f[0][0];
for(int i=1;i<=m;++i)f[0][i]=0;
for(int i=1;i<=n;++i)
{
for(int j=1;j<=m;++j)
cmin(f[i][min(j+X[i],m)],f[i-1][j]+1);
for(int j=1;j<=m;++j)
cmin(f[i][min(j+X[i],m)],f[i][j]+1);
for(int j=1;j<=m-Y[i];++j)
cmin(f[i][j],f[i-1][j+Y[i]]);
for(int j=1;j<=L[i];++j)f[i][j]=inf;
for(int j=H[i];j<=m;++j)f[i][j]=inf;
}
int mn=inf;
for(int j=1;j<=m;++j)
if(f[n][j]<1e9)
mn=min(mn,f[n][j]);
if(mn>1e9)
{
for(int i=n-1;i;--i)
for(int j=1;j<=m;++j)
if(f[i][j]<1e9)
{
int sum=0;puts("0");
for(int k=1;k<=i;++k)
if(H[k]<=m)++sum;
printf("%d\n",sum);
return 0;
}
}
else printf("1\n%d\n",mn);
return 0;
}
Day2
无线网络发射器选址 wireless
暴力
#include<iostream>
#include<cstdio>
using namespace std;
#define MAX 150
inline int read()
{
int x=0;bool t=false;char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
if(ch=='-')t=true,ch=getchar();
while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
return t?-x:x;
}
int s[MAX][MAX];
int d,n,ans=0,way=0;
int main()
{
d=read();n=read();
for(int i=1;i<=n;++i)
{
int x=read(),y=read(),k=read();
s[x][y]+=k;
}
for(int i=0;i<=128;++i)
for(int j=0;j<=128;++j)
{
int ss=0;
for(int k=max(0,i-d);k<=128&&k<=i+d;++k)
for(int l=max(0,j-d);l<=128&&l<=j+d;++l)
ss+=s[k][l];
if(ans<ss)ans=ss,way=1;
else if(ans==ss)way+=1;
}
printf("%d %d\n",way,ans);
return 0;
}
寻找道路 road
沿着反边\(dfs\)一遍找到所有合法点,再\(bfs\)一遍求答案。实际上只需要存反边就好了。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
#define MAX 10100
#define MAXL 200200
inline int read()
{
int x=0;bool t=false;char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
if(ch=='-')t=true,ch=getchar();
while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
return t?-x:x;
}
int n,m,S,T;
struct Line{int v,next;}e[MAXL<<1];
int h[MAX],cnt=1;
inline void Add(int u,int v){e[cnt]=(Line){v,h[u]};h[u]=cnt++;}
bool vis[MAX],book[MAX];
void dfs(int u)
{
if(vis[u])return;vis[u]=true;
for(int i=h[u];i;i=e[i].next)
if(!(i&1))dfs(e[i].v);
}
int dis[MAX];
void bfs()
{
memset(dis,63,sizeof(dis));
queue<int> Q;Q.push(S);dis[S]=0;
while(!Q.empty())
{
int u=Q.front();Q.pop();
for(int i=h[u];i;i=e[i].next)
if((i&1)&&dis[u]+1<dis[e[i].v])
{
if(!book[e[i].v])continue;
dis[e[i].v]=dis[u]+1;
Q.push(e[i].v);
}
}
}
int main()
{
n=read();m=read();
for(int i=1;i<=m;++i)
{
int u=read(),v=read();
Add(u,v);Add(v,u);
}
S=read(),T=read();
dfs(T);
for(int u=1;u<=n;++u)
{
bool fl=true;
for(int i=h[u];i;i=e[i].next)
if((i&1)&&!vis[e[i].v]){fl=false;break;}
book[u]=fl;
}
if(!book[S]){puts("-1");return 0;}
bfs();printf("%d\n",dis[T]);
return 0;
}
解方程 equation
显然没法直接算,所以我们取个模。显然一个模数很假,所以我们多搞几个模数。
显然\(x\)大于模数就不用重复算,所以我们对于每个模数预处理。
然后枚举就做完了。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int p[]={10007,10013,10017,10023,10029,10037,10097};
int a[7][105];
char ch[10100];
int n,m;
void get(int id)
{
int l=strlen(ch+1);
for(int i=0;i<7;++i)
{
int x=0,fr=1;bool fl=false;
if(ch[1]=='-')fl=true,fr=2;
for(int j=fr;j<=l;++j)
x=(x*10+ch[j]-48)%p[i];
if(fl)x=(p[i]-x)%p[i];
a[i][id]=x;
}
}
int Calc(int id,int x)
{
int ret=0;
for(int i=0,X=1;i<=n;++i,X=X*x%p[id])
ret=(ret+X*a[id][i])%p[id];
return ret;
}
bool vis[7][20000];
int S[1000100],top;
int main()
{
scanf("%d%d",&n,&m);
for(int i=0;i<=n;++i)scanf("%s",ch+1),get(i);
for(int i=0;i<7;++i)
for(int j=0;j<p[i];++j)
if(Calc(i,j)==0)vis[i][j]=true;
for(int i=1;i<=m;++i)
{
bool fl=true;
for(int j=0;j<7;++j)if(!vis[j][i%p[j]])fl=false;
if(fl)S[++top]=i;
}
printf("%d\n",top);
for(int i=1;i<=top;++i)printf("%d\n",S[i]);
return 0;
}
NOIP2014题解的更多相关文章
- [NOIP补坑计划]NOIP2014 题解&做题心得
六道普及组题,没啥好说的 场上预计得分:100+100+100+100+100+100=600(省一分数线490) (AK是不可能AK的,这辈子不可能AK的) 题解: D1T1 生活大爆炸版石头剪刀布 ...
- 【题解】 2月19日 厦门双十中学NOIP2014模拟D2 T1 采药人的切题规则
Made by 退役的OIer 第一次写博客,写得不好 or 不清楚的可以 在下方留言,我会尽量改进的! 好啦~~~回到正题,题面见传送门 [问题描述] 采药人最近在认真切题,但回旋的转盘时常在眼前浮 ...
- [NOIP2014]寻找道路 题解
题目大意: 在有向图G 中,每条边的长度均为1 ,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 1 .路径上的所有点的出边所指向的点都直接或间接与终点连通. 2 .在满足 ...
- [NOIP2014]联合权值 题解
题目大意: 有一棵树,求距离为2的点权的乘积的和以及最大值. 思路: 枚举每一个点,则与其相邻的点互为距离为2的点.该部分的最大值为点权最大的两个点的积,和为点的权值和的平方减去每个点的平方,这样每条 ...
- noip2014提高组day2二题题解-rLq
(又是昨天的作业……本题写于昨天) (这破题都做这么久,我是不是吃枣药丸……) (好吧这是一道图论题呢) 本题地址:http://www.luogu.org/problem/show?pid=2296 ...
- 【NOIP2014】DAY2题解+代码
T1 傻逼题……不想写贴昨年代码了. 总之随便怎么搞都能过. 15年的DAY2T1怎么那么毒瘤真是越活越倒退] #include <iostream> #include <fstre ...
- 【NOIP2014】Day1题解+代码
Day1 T1 签到题,模拟一下随便写就能过. 不过小心像我一样表打错傻逼的调了10min. #include <algorithm> #include <iostream> ...
- NOIP2014提高组 题解报告
D1 T1 无线网路发射器选址 题目大意:找一个矩形,使其覆盖的目标点最大. 题目过水,直接暴力搞过去,代码就不贴了. 但我TM居然有个地方SB了,调了半天才发现输入有问题: scanf(" ...
- 题解 【NOIP2014】解方程
题面 解析 这题的数据看起来似乎特别吓人... 但实际上, 这题非常好想. 只需要模一个大质数就行了(我模的是1e9+7)(实测有效) 另外,a要用快读读入,再一边模Mod(因为实在太大了). 然后, ...
随机推荐
- c#对联合体的封装
https://blog.csdn.net/u012846041/article/details/37518313 标准C或者C++中均提供关键字定义联合结构,C#中未提供类似的关键字,但仍然可以定义 ...
- Log4j2使用笔记
log4j2是log4j的最新版,现在已经有很多公司在使用了.log4j2和log4j的优缺点对比,请自行百度. 上一篇笔记讲了关于log4j的使用.这篇笔记主要讲解log4 ...
- 基于BlogEngine.NET搭建个人博客
早些时候在万网以我自己的英文名买了个域名 giantliu.com又看到万网有一个免费版本的虚拟主机,而且还支持.net4.5这年头支持.net4.5的免费主机不多,本来想用阿里云/windows a ...
- Spring+SpringMVC+MyBatis+easyUI整合进阶篇(八)线上Mysql数据库崩溃事故的原因和处理
前文提要 承接前文<一次线上Mysql数据库崩溃事故的记录>,在文章中讲到了一次线上数据库崩溃的事件记录,建议两篇文章结合在一起看,不至于摸不着头脑. 由于时间原因,其中只讲了当时的一些经 ...
- Centos7.3下安装Jumpserver 1.0.0(支持windows组件)
Jumpserver最新版本支持windows组件,废话不多介绍了,下面直接介绍下部署过程: 0)系统环境 CentOS 7.3 IP: 192.168.10.210 [root@jumpserver ...
- beta阶段测试基本概况报告
文件地址 测试基本信息 Bitmap 测试 ...
- spring引入HikariCP连接池
1.导入jar包 2.applicationContext.xml中配置 <bean id="dataSource" class="com.zaxxer.hikar ...
- 无限级结构SQL查询所有的下级和所有的下级
Id,PId无限级结构,查询某个Id的所有下级或所有上级,使用WITH AS查询 查找Id为1所有的下级 /*查找Id为1所有的下级*/ WITH T AS( SELECT Id,PId,Name,0 ...
- Tomcat启动失败
前景:使用的是tomcat9.0,配置好后,使用一切正常,刷慕课跟着做练习,也一切正常.出事在于,老师为了方便直接拷之前写的一个项目,我照做了,老师改了虚拟路径了,我忘记改了,然后跑了一下项目就出毛病 ...
- 【Alpha发布】网站已经正式发布!
Alpha版本发布说明 一.功能介绍 本团队所做的物理实验网站是以生成物理实验报告为基础功能的网站.Alpha版本具有的功能大体如下: Figure 1首页 1. 注册登录功能 用户可以通过在注册页通 ...