【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 模 ...
随机推荐
- APP案例分析
产品 蓝叠安卓模拟器 选择理由 看了一眼桌面,就这个比较有意思.现在很多人喜欢玩手游,经常喜欢开个小号搞事情.这时候身边又没有多余的手机,怎么办?安卓模拟器下一个.手机屏幕太小玩起来没意思怎么 ...
- 学号:201621123032 《Java程序设计》第4周学习总结
1:本周学习总结 1. 写出你认为本周学习中比较重要的知识点关键词 继承,多态,父类object,抽象类 2. 尝试使用思维导图将这些关键词组织起来 2:书面作业 2.1: 面向对象设计 1. 讲故事 ...
- 学生ID查询
var http = require("http"); var server = http.createServer(function(req,res){ //得到url var ...
- 【iOS】swift-ObjectC 在iOS 8中使用UIAlertController
iOS 8的新特性之一就是让接口更有适应性.更灵活,因此许多视图控制器的实现方式发生了巨大的变化.全新的UIPresentationController在实现视图控制器间的过渡动画效果和自适应设备尺寸 ...
- Microsoft dynamic sdk中join应该注意的问题.
QueryExpression queryNextSeq = new QueryExpression { EntityName = "ep_prodoperationsequence&quo ...
- React 深入系列2:组件分类
文:徐超,<React进阶之路>作者 授权发布,转载请注明作者及出处 React 深入系列2:组件分类 React 深入系列,深入讲解了React中的重点概念.特性和模式等,旨在帮助大家加 ...
- 关于阿里巴巴iconfont的使用方法
iconfont网址:http://www.iconfont.cn/ 说起iconfont,做前端开发的应该知道它的好处,图标库之丰富,只有你想不到的,没有你找不到的,而且轻量高清.用户在iconfo ...
- RxJava系列6(从微观角度解读RxJava源码)
RxJava系列1(简介) RxJava系列2(基本概念及使用介绍) RxJava系列3(转换操作符) RxJava系列4(过滤操作符) RxJava系列5(组合操作符) RxJava系列6(从微观角 ...
- 记录下项目中常用到的JavaScript/JQuery代码一(大量实例)
一直没有系统学习Javascript和Jquery,每次都是用到的时候去搜索引擎查,感觉效率挺低的.这边把我项目中用的的记录下,想到哪写哪,有时间再仔细整理. 当然,由于我主要是写后端java开发,而 ...
- C#使用Gecko实现浏览器
Gecko就是火狐浏览器的内核啦,速度很快,兼容性比.net内置的webbrowser高到不知哪里去了. 使用Gecko首先要下载一堆依赖库,主要是Skybound.Gecko和xulrunner. ...