CH Round #53 -【Nescafé 32】杯NOIP模拟赛
A.GCD Path http://ch.ezoj.tk/contest/CH%20Round%20%2353%20-%E3%80%90Nescaf%C3%A9%2032%E3%80%91%E6%9D%AFNOIP%E6%A8%A1%E6%8B%9F%E8%B5%9B/GCD%20Path
题解:我想掀桌。。。
刚开始没思路,打了个30分的暴力把结果打出来,找规律。
发现x-y的最短路貌似就是 x/gcd(x,y)的质因数分解加起来?
果断 for 2 to sqrt() 枚举。。。。。。。。。。。。。。。。。。
还以为能AC,妈蛋,爆零了。。。。。。。。。。。。。。。。
你以为质因数分解是判素数????????????????
呵呵。。。。。。。 呵呵。。。。。。。。呵呵。。。。。。。
加上 if(x==1)ans+=x 瞬间50。。。。。。。。。。。。。。。。
加上 if(x==y)cout<<0<<endl 瞬间AC。。。。。。。。。。。。。
极度郁闷中。。。。。。。。。。。。。。。。。。。。。。。
如果我会用linux的diff的话大概会和暴力比较一下,结果只看了100的数据就以为对了。。。。
如果我10.30走的话也许会在对拍一下。。。。。。。。。。。
没办法,还是人太弱。。。。。。。。。。。。。。。。。。。
代码:
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<string>
#define inf 1000000000
#define maxn 500+100
#define maxm 500+100
#define eps 1e-10
#define ll long long
#define pa pair<int,int>
#define for0(i,n) for(int i=0;i<=(n);i++)
#define for1(i,n) for(int i=1;i<=(n);i++)
#define for2(i,x,y) for(int i=(x);i<=(y);i++)
#define for3(i,x,y) for(int i=(x);i>=(y);i--)
#define mod 1000000007
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=*x+ch-'';ch=getchar();}
return x*f;
}
int n,m;
inline int gcd(int x,int y){return y?gcd(y,x%y):x;}
int main()
{
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
n=read();m=read();
while(m--)
{
int x=read(),y=read(),t=(int)sqrt(x),ans=;
if(x==y){cout<<<<endl;continue;}
x/=gcd(x,y);if(x==){cout<<<<endl;continue;};
for2(i,,t)if(x%i==)
{
while(x%i==)x/=i,ans+=i;
}
if(x!=)ans+=x;
printf("%d\n",ans);
}
return ;
}
B.密室http://ch.ezoj.tk/contest/CH%20Round%20%2353%20-%E3%80%90Nescaf%C3%A9%2032%E3%80%91%E6%9D%AFNOIP%E6%A8%A1%E6%8B%9F%E8%B5%9B/%E5%AF%86%E5%AE%A4
题解:发现一个结论:只要开的门的集合相同,那么拥有的钥匙数一定相同。显然。。。
然后我们只需要判断能否到达每个门了。。。发现不会判囧。。。。。。。。。。
那BFS吧,既然写暴力就裸一点
x表示红的,y表示蓝的,z表示白的,w表示经过的点集合。。。。
会T?那到maxn break吧,估计能骗个5.60分。。。。。。。。。
成绩一下来逗逼了,90,这么照顾暴力。。。。。。。。。。。。。
代码:
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<string>
#define inf 1000000000
#define maxn 5000000
#define maxm 500+100
#define eps 1e-10
#define ll long long
#define pa pair<int,int>
#define for0(i,n) for(int i=0;i<=(n);i++)
#define for1(i,n) for(int i=1;i<=(n);i++)
#define for2(i,x,y) for(int i=(x);i<=(y);i++)
#define for3(i,x,y) for(int i=(x);i>=(y);i--)
#define mod 1000000007
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=*x+ch-'';ch=getchar();}
return x*f;
}
struct rec1{int x,y,z;}a[],b[];
struct rec2{int x,y,z,w;}q[maxn];
int n;
int main()
{
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
n=read();
for1(i,n)a[i].x=read();
for1(i,n)a[i].y=read();
for1(i,n)b[i].x=read();
for1(i,n)b[i].y=read();
for1(i,n)b[i].z=read();
int l=,r=;
q[++r].x=read(),q[r].y=read(),q[r].z=read(),q[r].w=;
int ans=q[r].x+q[r].y+q[r].z;
while(l!=r)
{
rec2 now=q[++l];if(l==maxn)break;
for1(i,n)
if((((now.w)&(<<(i-)))==)&&(max(a[i].x-now.x,)+max(a[i].y-now.y,)<=now.z))
{
q[++r].x=max(now.x-a[i].x,)+b[i].x;if(r==maxn)r=;
q[r].y=max(now.y-a[i].y,)+b[i].y;
q[r].z=now.z-max(a[i].x-now.x,)-max(a[i].y-now.y,)+b[i].z;
q[r].w=now.w+(<<(i-));
ans=max(ans,q[r].x+q[r].y+q[r].z);
}
}
printf("%d\n",ans);
return ;
}
C.数据备份http://ch.ezoj.tk/contest/CH%20Round%20%2353%20-%E3%80%90Nescaf%C3%A9%2032%E3%80%91%E6%9D%AFNOIP%E6%A8%A1%E6%8B%9F%E8%B5%9B/%E6%95%B0%E6%8D%AE%E5%A4%87%E4%BB%BD
题解:发现x节点选了x-1和x+1都不能选,和cf某题比较像?
卧操!n=10W,k=5w,你在逗我?
算了,还是n*k的暴力算了,空间上用滚动就行了。。。
居然能拿65,是在补偿我第一题吗T_T
代码:
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<string>
#define inf 1000000000
#define maxn 150000
#define maxm 500+100
#define eps 1e-10
#define ll long long
#define pa pair<int,int>
#define for0(i,n) for(int i=0;i<=(n);i++)
#define for1(i,n) for(int i=1;i<=(n);i++)
#define for2(i,x,y) for(int i=(x);i<=(y);i++)
#define for3(i,x,y) for(int i=(x);i>=(y);i--)
#define mod 1000000007
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=*x+ch-'';ch=getchar();}
return x*f;
}
int n,k,a[maxn],f[][maxn][];
int main()
{
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
n=read();k=read();
for1(i,n)a[i]=read();
for0(i,n)f[][i][]=f[][i][]=f[][i][]=f[][i][]=inf;
f[][][]=;
int t=;
for1(i,n-)
{
t=-t;
for0(j,(i>>)+)
{
f[t][j][]=f[t][j][]=inf;
if(j)f[t][j][]=f[-t][j-][]+a[i+]-a[i];
f[t][j][]=min(f[-t][j][],f[-t][j][]);
}
//for0(j,k)cout<<i<<' '<<j<<' '<<f[t][j][0]<<' '<<f[t][j][1]<<endl;
}
printf("%d\n",min(f[t][k][],f[t][k][]));
return ;
}
2.3正解待会儿补
UPD:我想上天台。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
卧操,我2题居然是正解,把maxn改成1000W就A了?????????????????????
T_T
代码:
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<string>
#define inf 1000000000
#define maxn 10000000
#define maxm 500+100
#define eps 1e-10
#define ll long long
#define pa pair<int,int>
#define for0(i,n) for(int i=0;i<=(n);i++)
#define for1(i,n) for(int i=1;i<=(n);i++)
#define for2(i,x,y) for(int i=(x);i<=(y);i++)
#define for3(i,x,y) for(int i=(x);i>=(y);i--)
#define mod 1000000007
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=*x+ch-'';ch=getchar();}
return x*f;
}
struct rec1{int x,y,z;}a[],b[];
struct rec2{int x,y,z,w;}q[maxn];
int n;
int main()
{
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
n=read();
for1(i,n)a[i].x=read();
for1(i,n)a[i].y=read();
for1(i,n)b[i].x=read();
for1(i,n)b[i].y=read();
for1(i,n)b[i].z=read();
int l=,r=;
q[++r].x=read(),q[r].y=read(),q[r].z=read(),q[r].w=;
int ans=q[r].x+q[r].y+q[r].z;
while(l!=r)
{
rec2 now=q[++l];if(l==maxn)break;
for1(i,n)
if((((now.w)&(<<(i-)))==)&&(max(a[i].x-now.x,)+max(a[i].y-now.y,)<=now.z))
{
q[++r].x=max(now.x-a[i].x,)+b[i].x;if(r==maxn)r=;
q[r].y=max(now.y-a[i].y,)+b[i].y;
q[r].z=now.z-max(a[i].x-now.x,)-max(a[i].y-now.y,)+b[i].z;
q[r].w=now.w+(<<(i-));
if(q[r].x+q[r].y+q[r].z>ans)ans=q[r].x+q[r].y+q[r].z;
}
}
printf("%d\n",ans);
return ;
}
好吧。真正的正解其实在这里。我的只不过能AC罢了。。。。。。。。
不理解,怎么能只访问一次就不走了呢,估计是数据弱?求大神指导
代码:
#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define N 50000 + 5 int n, x, y, z, ans, door[][], key[][];
bool Open[N], Vis[N]; inline void dfs(int state, int r, int g, int w)
{
if (Vis[state]) return ;
ans = max(ans, r + g + w);
for (int i = ; i <= n; i ++)
if (!Open[i])
{
int _r = r - door[i][];
int _g = g - door[i][];
int _w = w + min(_r, ) + min(_g, );
if (_w < ) continue ;
_r = max(_r, ) + key[i][];
_g = max(_g, ) + key[i][];
_w += key[i][];
Open[i] = ;
dfs(state ^ ( << i - ), max(_r, ), max(_g, ), _w);
Open[i] = ;
}
Vis[state] = ;
} int main()
{
scanf("%d", &n);
for (int i = ; i < ; i ++)
for (int j = ; j <= n; j ++)
scanf("%d", door[j] + i);
for (int i = ; i < ; i ++)
for (int j = ; j <= n; j ++)
scanf("%d", key[j] + i);
scanf("%d%d%d", &x, &y, &z);
dfs(, x, y, z);
printf("%d\n", ans);
return ;
}
妈蛋,吐槽第二题,下面这程序都能AC,数据是有多弱,当时我本来就打算写这个。。。
代码:
#include<stdio.h>
int a[],b[],c[],d[],e[];
int r,g,w,hh;
int main()
{
int n,i,ans=;
scanf("%d",&n);
for(i=;i<=n;i++)
scanf("%d",&a[i]);
for(i=;i<=n;i++)
scanf("%d",&b[i]);
for(i=;i<=n;i++)
scanf("%d",&c[i]);
for(i=;i<=n;i++)
scanf("%d",&d[i]);
for(i=;i<=n;i++)
scanf("%d",&e[i]);
scanf("%d %d %d",&r,&g,&w);
ans=r+g+w;
if(n==)
{
ans=r-a[]+g-b[]+w+c[]+d[]+e[];
if(ans<r+g+w+c[]+d[]+e[])
ans=r+g+w+c[]+d[]+e[];
}
for(i=;i<=n;i++)
{
if(c[i]+d[i]+e[i]-a[i]-b[i]>)ans=ans-a[i]-b[i]+c[i]+d[i]+e[i];
}
printf("%d",ans);
return ;
}
CH Round #53 -【Nescafé 32】杯NOIP模拟赛的更多相关文章
- CH Round #52 - Thinking Bear #1 (NOIP模拟赛)
A.拆地毯 题目:http://www.contesthunter.org/contest/CH%20Round%20%2352%20-%20Thinking%20Bear%20%231%20(NOI ...
- 队爷的讲学计划 CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的讲学计划 题解:刚开始理解题意理解了好半天,然后发 ...
- 队爷的Au Plan CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的Au%20Plan 题解:看了题之后觉得肯定是DP ...
- 队爷的新书 CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的新书 题解:看到这题就想到了 poetize 的封 ...
- CH Round #58 - OrzCC杯noip模拟赛day2
A:颜色问题 题目:http://ch.ezoj.tk/contest/CH%20Round%20%2358%20-%20OrzCC杯noip模拟赛day2/颜色问题 题解:算一下每个仆人到它的目的地 ...
- 【强联通分量缩点】【最长路】【spfa】CH Round #59 - OrzCC杯NOIP模拟赛day1 队爷的讲学计划
10分算法:对于城市网络为一条单向链的数据, 20分算法:对于n<=20的数据,暴力搜出所有的可能路径. 结合以上可以得到30分. 60分算法:分析题意可得使者会带着去的城市也就是这个城市所在强 ...
- 【离散化】【扫描线】CH Round #59 - OrzCC杯NOIP模拟赛day1 队爷的新书
//上图绿色扫描线右侧少画了一条扫描线. 很多区间把数轴分成了很多段,看哪个点的(区间覆盖数*该点权值)最大. 显然在某个区间的右端点的答案是最优的. 排序后 用扫描线从左到右扫描,维护每个点的覆盖数 ...
- CH Round #59 - OrzCC杯NOIP模拟赛day1
第一题:队爷的新书 题意简述:给定n个闭区间,求出一个数p使它与包含它的区间数的积最大,输出这个积. 分析:使用一个差分数组g,每个区间[l,r],l位置加1,r+1的位置减1,从前往后统计,得到对于 ...
- 【Nescafé 31】杯NOIP模拟赛
t1 题意:n*m的棋盘上从(1,1)走到(n,m),只能向下或向右,一些格子有老鼠,每个老鼠互不相同,当处于与老鼠有重边的格子时,视为看见了这只老鼠,求到终点看到最少的不同老鼠数. 分析:DP 由于 ...
随机推荐
- POJ 3009 深度优先搜索
问题:打冰球.冰球可以往上下左右4个方向走,只有当冰球撞到墙时才会停下来,而墙会消失.当冰球紧贴墙时,不能将冰球往那个方向打.冰球出界就当输,超过10次还没将冰球打到目标位置也当输.求用最小次数将冰球 ...
- 动态sql语句
当需要根据外部输入的参数来决定要执行的SQL语句时,常常需要动态来构造SQL查询语句,个人觉得用得比较多的地方就是执行搜索查询的SQL语句.对于搜索,可能要根据搜索条件判断来动态执行SQL语句. 在S ...
- FTP服务器上删除文件夹失败
很多人都知道:要删除FTP服务器上的文件夹时,必须确保文件夹下面没有其他文件,否则会删除失败! 可是,有些服务器考虑到安全等因素,通常会隐藏以点开始的文件名,例如“.test.txt”.于是,有的坏人 ...
- WPF自定义下拉控件
可以搜索的下拉条 using System; using System.Collections; using System.Collections.Generic; using System.Coll ...
- poj 1089 Intervals
http://poj.org/problem?id=1089 Intervals Time Limit: 1000MS Memory Limit: 10000K Total Submissions ...
- sql server 2008 在安装了活动目录以后无法启动服务了
软件环境: windows server 2008 r2 ms sql server 2008 r2 在安装活动目录以前,数据库是正常运行的. 安装了活动目录以后,数据库启动时就提示无法启动.出错的信 ...
- 五、SolrJ、Request Handler
什么是SolrJ 既然Solr是以单独的WebApp形式存在的,那么Solr理应提供与Solr通信的Api吧,对的,这就是SolrJ,既然与solr通信是通过url,那么其实我们也可以不用SolrJ, ...
- IIS7 常用模块介绍说明
1.1.0 IIS常用的功能模块介绍: 1) 静态内容:可发布静态 Web 文件格式,比如 HTML 页面和图像文件. 2) 默认文档:允许您配置当用户未在 URL ...
- 从TableviewCell中获得TableviewController的几种方式
id view = [self superview]; // 获取cell所在的tableview while (view && [view isKindOfClass:[UITabl ...
- DateTimeBox( 日期时间输入框)
本节课重点了解 EasyUI 中 DateTimeBox(日期时间输入框)组件的使用方法,这个组件依赖于 DateBox(日期输入框)组件和 TimeSpinner(时间微调)组件. 一. 加载方式/ ...