【NOIP模拟赛】总结
题目描述
输入
输出
样例输入
样例输出
提示
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=,M=,INF=,MOD=;
int head[N],num=;
struct Lin{
int next,to,dis[];
}a[M<<];
void init(int x,int y,int z1,int z2){
a[++num].next=head[x];a[num].to=y;a[num].dis[]=z1;a[num].dis[]=z2;head[x]=num;
if(!x)return ;a[++num].next=head[y];a[num].to=x;a[num].dis[]=z1;a[num].dis[]=z2;head[y]=num;
}
int gi(){
int str=;char ch=getchar();
while(ch>'' || ch<'')ch=getchar();
while(ch>='' && ch<='')str=str*+ch-,ch=getchar();
return str;
}
int n,m,k,S,T;int f[][N],q[N*],s[N];bool vis[N];
void spfa(int sta,bool tt)
{
for(int i=;i<=n;i++)vis[i]=false,f[sta][i]=INF;
int t=,sum=,x,u;
int from=;
if(sta==)from=S;if(sta==)from=T;if(sta==)from=;
q[]=from;vis[from]=true;f[sta][from]=;
while(t!=sum)
{
t++;t%=MOD;
x=q[t];
for(int i=head[x];i;i=a[i].next)
{
u=a[i].to;
if(a[i].dis[tt]+f[sta][x]<f[sta][u])
{
f[sta][u]=f[sta][x]+a[i].dis[tt];
if(!vis[u])vis[u]=true,sum++,sum%=MOD,q[sum]=u;
}
}
vis[x]=false;
}
}
int main()
{
n=gi();m=gi();k=gi();S=gi();T=gi();
for(int i=;i<=k;i++)s[i]=gi();
int x,y,z1,z2;
for(int i=;i<=m;i++)
{
x=gi();y=gi();z1=gi();z2=gi();
if(x==y)continue;
init(x,y,z1,z2);
}
spfa(,);spfa(,);
long long sum=;
for(int i=;i<=k;i++)init(,s[i],-f[][s[i]],),sum+=f[][s[i]];
spfa(,);
long long ans=INF,tmp;
long long pp=;
for(int i=;i<=n;i++)
{
tmp=f[][i]+f[][i]+f[][i];
if(tmp<ans)ans=tmp,pp=i;
}
printf("%lld",ans+sum);
return ;
}
题目描述
输入
输出
样例输入
样例输出
提示
样例解释
N=2*2*3*3=36
phi(N)=36*(1-1/2)*(1-1/3)=12 12=2*2*3
样例输入二
4
37 1
3 4
37 1
333667 2
样例输出二
2 4
3 8
37 2
167 1 333667 1
题解:
水的数论,分解每一个pi-1即可
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long ll;
const int N=,M=,T=;
int gi(){
int str=;char ch=getchar();
while(ch>'' || ch<'')ch=getchar();
while(ch>='' && ch<='')str=str*+ch-'',ch=getchar();
return str;
}
bool d[M];int mark[T];bool cf[T];
ll qm(ll x,int k)
{
if(x==)return ;
if(k==)return ;
ll sum=;
while(k)
{
if(k&)sum*=x;
k>>=;x*=x;
}
return sum;
}
int a[T],num=;int z[N],t=;
void qd(int p)
{
int lim;int c;
num=;
for(int i=;i<=t;i++){if(p%z[i]==)a[++num]=z[i];}
for(int i=;i<=num;i++)
{
int k=,tmp=p;
while(tmp)
{
if(tmp%a[i])break;
k++;tmp/=a[i];
}
mark[a[i]]+=k;
}
}
int main()
{
//freopen("pp.in","r",stdin);
int n,x,y;
scanf("%d",&n);
memset(mark,,sizeof(mark));
for(int i=;i<=n;i++)
{
x=gi();y=gi();
mark[x]+=y;
cf[x]=true;
}
int m=1e6;
d[]=false;
for(int i=;i<=m;i++)
{
if(d[i])continue;
z[++t]=i;
for(int j=*i;j<=m;j+=i)d[j]=true;
}
int to=1e6;
for(int i=;i<=to;i++)
{
if(cf[i])
qd(i-),mark[i]--;
}
for(int i=;i<=to;i++)
{
if(mark[i])printf("%d %d\n",i,mark[i]);
}
return ;
}
题目描述
输入
第一行一个正整数n,代表积木的个数。 接下来有n行,每行两个数li,ri,分别代表第i块积木左端点和右端点。
输出
输出一行两个整数,用一个空格隔开,分别代表最底层最多有多少积木和积木最少有多 少层。
样例输入
样例输出
提示
第 1、2、3、4 块放在最底层,第 5 块第二层,第 6块第三层。此时底层共 4块积木。
第 1、2、6块放在最底层,第 3、4、5块第二层。此时高度为 2。
另 20%: n<=100,0<=l<=50,r=l+2,即每块积木长均为 2
100%:n<=100000,-2*10^8<=l,r<=2*10^8
题解:
贪心,第一问线段覆盖,按右端点排序,然后以此判断 l>=last 满足就加入
第二问将每一条线段拆成两个点 再将每个点排序,线性扫描一边,遇l h++遇r h-- 意为能塞入底层就塞入
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=;
int gi(){
int str=,f=;char ch=getchar();
while(ch>'' || ch<''){if(ch=='-')f=-;ch=getchar();}
while(ch>='' && ch<='')str=str*+ch-,ch=getchar();
return str*f;
}
struct Point{
int l,r;
}a[N];
bool comp(const Point &p,const Point &q){return p.r<q.r;}
struct Pointed{
int x;bool t;
}p[N<<];
bool cmp(const Pointed &p,const Pointed &q){if(p.x!=q.x)return p.x<q.x;return p.t>q.t;}
int main()
{
int n=gi();
for(int i=;i<=n;i++)
{
a[i].l=gi();a[i].r=gi();
p[(i<<)-].x=a[i].l;p[(i<<)-].t=;
p[i<<].x=a[i].r;p[i<<].t=;
}
sort(a+,a+n+,comp);
int from=-2e9,ans1=;
for(int i=;i<=n;i++)
{
if(a[i].l>=from)
{
ans1++;
from=a[i].r;
}
}
printf("%d ",ans1);
sort(p+,p+(n<<)+,cmp);
int top=,ans2=,ppap=(n<<);
for(int i=;i<=ppap;i++)
{
if(!p[i].t)top++;
else top--;
if(top>ans2)ans2=top;
}
printf("%d",ans2);
return ;
}
题目描述
擦弹(graze)
输入
输出
样例输入
样例输出
提示
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const int N=,M=;
int F[][N][N][N],p[][N][N][N];int a[N];
int gi(){
int str=;char ch=getchar();
while(ch>'' || ch<'')ch=getchar();
while(ch>='' && ch<='')str=str*+ch-,ch=getchar();
return str;
}
int main()
{
int n;
scanf("%d",&n);
int m=*n-;
int tmp=,l=,pc=;
memset(F,/,sizeof(F));
F[][][][]=;
int c=,cc=;
for(int i=;i<=m;i++)
{
for(int j=;j<=n;j++)
{
a[j]=gi();
}
for(int j=;j<n;j++)
{
if(j>i)break;
for(int k=j;k<n;k++)
{
if(k+j>i)break;
pc=k>i-j-k-n?k:i-j-k-n;
for(int g=pc;g<n;g++)
{
if(g+j+k>i)break;
l=i-j-k-g;
if(l<g-)break;
int *pp=&F[cc][j][k][g];
int *qq=&p[cc][j][k][g];
*pp=2e8;
*qq=;
tmp=a[j+]+a[k+]+a[g+]+a[l+];
if(tmp+F[c][j-][k][g]<=*pp&& j)
{
int t=F[c][j-][k][g];
if(tmp+t<*pp)
*qq=p[c][j-][k][g]+a[j];
else if(p[c][j-][k][g]+a[j]>*qq)*qq=p[c][j-][k][g]+a[j];
*pp=tmp+t;
}
if(tmp+F[c][j][k-][g]<=*pp&& k)
{
int t=F[c][j][k-][g];
if(tmp+t<*pp)
*qq=p[c][j][k-][g]+a[k];
else if(p[c][j][k-][g]+a[k]>*qq)*qq=p[c][j][k-][g]+a[k];
*pp=tmp+t;
}
if(tmp+F[c][j][k][g-]<=*pp&& g)
{
int t=F[c][j][k][g-];
if(tmp+t<*pp)
*qq=p[c][j][k][g-]+a[g];
else if(p[c][j][k][g-]+a[j]>*qq)*qq=p[c][j][k][g-]+a[g];
*pp=tmp+t;
}
if(tmp+F[c][j][k][g]<=*pp)
{
int t=F[c][j][k][g];
if(tmp+t<*pp)
*qq=p[c][j][k][g]+a[l];
else if(p[c][j][k][g]+a[l]>*qq)*qq=p[c][j][k][g]+a[l];
*pp=tmp+t;
}
}
}
}
c^=;cc^=;
}
cout<<F[c][n-][n-][n-]<<" "<<p[c][n-][n-][n-];
return ;
}
【NOIP模拟赛】总结的更多相关文章
- NOIP模拟赛20161022
NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...
- contesthunter暑假NOIP模拟赛第一场题解
contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...
- NOIP模拟赛 by hzwer
2015年10月04日NOIP模拟赛 by hzwer (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...
- 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程
数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...
- 队爷的讲学计划 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/颜色问题 题解:算一下每个仆人到它的目的地 ...
- 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 #49 - Streaming #4 (NOIP模拟赛Day2)
A.二叉树的的根 题目:http://www.contesthunter.org/contest/CH%20Round%20%2349%20-%20Streaming%20%234%20(NOIP 模 ...
随机推荐
- 201621123062《java程序设计》第三周作业总结
1.本周学习总结 初学面向对象,会学习到很多碎片化的概念与知识.尝试学会使用 将这些碎片化的概念.知识点组织起来.请使用工具画出本周学习到的知识点及知识点之间的联系.步骤如下: 1.1写出你认为本周学 ...
- 团队作业4——第一次项目冲刺(Alpha版本)2017.11.14
第一次会议:2017-11-14 额--这几天比较忙,忘记上传了,今天补上 先上个图,O(∩_∩)O哈哈: 会议主要内容: 1. 讨论整体框架 2. 个人具体分工 3. 代码统一 具体分工: 成员 计 ...
- Ubuntu下tomcat或eclipse启动提示没有java环境问题
tomcat和eclipse默认使用了openjdk,通过压缩包安装的jdk无法被识别,通过修改tomcat/bin下的catalina.sh添加jdk和jre路径即可 sudo gedit cata ...
- Flask学习 三 web表单
web表单 pip install flask-wtf 实现csrf保护 app.config['SECRET_KEY']='hard to guess string' # 可以用来存储框架,扩展,程 ...
- 《javascript设计模式与开发实践》阅读笔记(13)—— 职责链模式
职责链模式 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系,将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止. 书里的订单的例子 假设我们负责一个售卖手机 ...
- vue表单详解——小白速会
一.基本用法 你可以用 v-model 指令在表单 <input> 及 <textarea> 元素上创建双向数据绑定. 但 v-model 本质上不过是语法糖.它负责监听用户的 ...
- maven入门(1-1)maven是什么?
Maven是一个项目管理工具,它包含了 一个项目对象模型 (Project Object Model), 一组标准集合, 一个项目生命周期(Project Lifecycle), 一个依赖管理系统(D ...
- SQL查询语句练习
最近在学习SQL嘛,所以各个地方找题目来练手,毕竟现在能离得开数据库么? Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cname,T#) 课程表 SC(S#,C ...
- EasyUI easyui-combobox实现数据联动
实现效果:当用户选择了调查地区以后,只显示当前选择地区的频道,如果没有选择地区,那么频道下拉列表是空的.实现效果,如下
- java中的interface
转载: Java不支持多重继承,即一个类只能有一个父类 为了克服单继承的缺点,Java使用了接口,一个类可以实现多个接口 接口是抽象方法和常量值定义的集合,是一种特殊的抽象类接口中只包含常量和方法的定 ...