NOIP模拟赛20161007
%hzwer
题目名称 |
“与” |
小象涂色 |
行动!行动! |
输入文件 |
and.in |
elephant.in |
move.in |
输出文件 |
and.out |
elephant.in |
move.in |
时间限制 |
1s |
1s |
1s |
空间限制 |
64MB |
128MB |
128MB |
“与”
(and.pas/.c/.cpp)
时间限制:1s;空间限制64MB
题目描述:
给你一个长度为n的序列A,请你求出一对Ai,Aj(1<=i<j<=n)使Ai“与”Aj最大。
Ps:“与”表示位运算and,在c++中表示为&。
输入描述:
第一行为n。接下来n行,一行一个数字表示Ai。
输出描述:
输出最大的Ai“与”Aj的结果。
样例输入:
3
8
10
2
样例输出:
8
样例解释:
8 and 10 = 8
8 and 2 = 0
10 and 2 = 2
数据范围:
20%的数据保证n<=5000
100%的数据保证 n<=3*10^5,0<=Ai<=10^9
贪心
全打成二进制,从最高位开始考虑,维护一个列表
如果当前位是1的大于等于两个,那么此位可以是1,并且下一位只从这一位是1的里面找,所以列表只留下是1的
如果当前位是1的少于两个,则此位不可能是1,列表不变
PS:然而数据太弱,两个最大值&就是。其实只要最大值的二进制长度唯一,这个方法就WA
- #include <iostream>
- #include <cstdio>
- #include <algorithm>
- #include <cstring>
- #include <cmath>
- using namespace std;
- typedef long long ll;
- const int N=3e5+;
- inline int read(){
- char c=getchar();int x=,f=;
- while(c<''||c>''){if(c=='-')f=-;c=getchar();}
- while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
- return x*f;
- }
- int n,a[N],ans[];
- int f[N][];
- int lst[N],cnt=;
- int tmp[N],t=;
- void debug(int x){
- printf("debug %d\n",x);
- for(int i=;i<=cnt;i++) printf("%d ",lst[i]);
- printf("\n");
- }
- void sol(int d){
- if(d<) return;
- t=;
- for(int i=;i<=cnt;i++){
- int x=lst[i];
- if(f[x][d]) tmp[++t]=x;
- }
- if(t>=){
- ans[d]=;
- cnt=;
- for(int i=;i<=t;i++) lst[++cnt]=tmp[i];
- }
- //debug(d);
- sol(d-);
- }
- int main(){
- freopen("and.in","r",stdin);
- freopen("and.out","w",stdout);
- n=read();
- for(int i=;i<=n;i++){
- a[i]=read();
- for(int j=;j<=;j++)
- if(a[i]&(<<j)) f[i][j]=;//,printf("%d %d\n",i,j);
- }
- for(int d=;d>=;d--){
- cnt=;
- for(int i=;i<=n;i++) if(f[i][d]) lst[++cnt]=i;
- if(cnt<) continue;
- ans[d]=;
- //debug(d);
- sol(d-);break;
- }
- int x=;
- for(int i=;i>=;i--) if(ans[i]) x+=(<<i);
- printf("%d",x);
- }
小象涂色
(elephant.pas/.c/.cpp)
时间限制:1s,空间限制128MB
题目描述:
小象喜欢为箱子涂色。小象现在有c种颜色,编号为0~c-1;还有n个箱子,编号为1~n,最开始每个箱子的颜色为1。小象涂色时喜欢遵循灵感:它将箱子按编号排成一排,每次涂色时,它随机选择[L,R]这个区间里的一些箱子(不选看做选0个),为之涂上随机一种颜色。若一个颜色为a的箱子被涂上b色,那么这个箱子的颜色会变成(a*b)mod c。请问在k次涂色后,所有箱子颜色的编号和期望为多少?
输入描述:
第一行为T,表示有T组测试数据。
对于每组数据,第一行为三个整数n,c,k。
接下来k行,每行两个整数Li,Ri,表示第i个操作的L和R。
输出描述:
对于每组测试数据,输出所有箱子颜色编号和的期望值,结果保留9位小数。
样例输入:
3
3 2 2
2 2
1 3
1 3 1
1 1
5 2 2
3 4
2 4
样例输出:
2.062500000
1.000000000
3.875000000
数据范围:
40%的数据1 <= T <= 5,1 <= n, k <= 15,2 <= c <= 20
100%的数据满足1 <= T <= 10,1 <= n, k <= 50,2 <= c <= 100,1 <= Li <= Ri <= n
不明白什么是期望
- 在概率论和统计学中,数学期望(mean)(或均值,亦简称期望)是试验中每次可能结果的概率乘以其结果的总和。是最基本的数学特征之一。它反映随机变量平均取值的大小。
看了题解
每个箱子只有染色次数不同,可以统一考虑
因为区间里随机选,所以1/2;因为c种颜色,所以1/c
f[i][j]表示染色i次颜色为j的概率
f[i+1][j]+=f[i][j]/2;
f[i+1][j*x%c]+=f[i][j]/2/c; x枚举颜色
【DP用更新的写法比较好】
用sum[i]统计染色i次的颜色和期望值
然后求和每个点的贡献sum[这个点染色次数]
- #include <iostream>
- #include <cstdio>
- #include <algorithm>
- #include <cstring>
- using namespace std;
- typedef long long ll;
- const int N=,C=;
- inline int read(){
- char c=getchar();int x=,f=;
- while(c<''||c>''){if(c=='-')f=-;c=getchar();}
- while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
- return x*f;
- }
- int T,n,c,k,t[N],l,r;
- double f[N][C],sum[N];
- void dp(){
- memset(f,,sizeof(f));
- memset(sum,,sizeof(sum));
- f[][]=;
- for(int i=;i<=k;i++)
- for(int j=;j<c;j++){
- f[i+][j]+=f[i][j]/;
- for(int x=;x<c;x++)
- f[i+][j*x%c]+=f[i][j]//c;
- }
- for(int i=;i<=k;i++)//!
- for(int j=;j<c;j++) sum[i]+=f[i][j]*j;
- }
- int main(){
- //freopen("elephant.in","r",stdin);
- //freopen("elephant.out","w",stdout);
- T=read();
- while(T--){
- memset(t,,sizeof(t));
- n=read();c=read();k=read();
- for(int i=;i<=k;i++){
- l=read();r=read();
- for(int j=l;j<=r;j++) t[j]++;
- }
- dp();
- double ans=;
- for(int i=;i<=n;i++) ans+=sum[t[i]];
- printf("%.9lf\n",ans);
- }
- }
行动!行动!
(move.pas/.c/.cpp)
时间限制:1s;空间限制:128MB
题目描述:
大CX国的大兵Jack接到一项任务:敌方占领了n座城市(编号0~n-1),有些城市之间有双向道路相连。Jack需要空降在一个城市S,并徒步沿那些道路移动到T城市。虽然Jack每从一个城市到另一个城市都会受伤流血,但大CX国毕竟有着“过硬”的军事实力,它不仅已经算出Jack在每条道路上会损失的血量,还给Jack提供了k个“简易急救包”,一个包可以让Jack在一条路上的流血量为0。Jack想知道自己最少会流多少血,不过他毕竟是无脑的大兵,需要你的帮助。
输入描述:
第一行有三个整数n,m,k,分别表示城市数,道路数和急救包个数。
第二行有两个整数,S,T。分别表示Jack空降到的城市编号和最终要到的城市。
接下来有m行,每行三个整数a,b,c,表示城市a与城市b之间有一条双向道路。
输出描述:
Jack最少要流的血量。
样例输入:
5 6 1
0 3
3 4 5
0 1 5
0 2 100
1 2 5
2 4 5
2 4 3
样例输出:
8
数据范围:
对于30%的数据,2<=n<=50,1<=m<=300,k=0;
对于50%的数据,2<=n<=600,1<=m<=6000,0<=k<=1;
对于100%的数据,2<=n<=10000,1<=m<=50000,0<=k<=10.
分层图最短路
不就是那道飞行路线
- #include <iostream>
- #include <cstdio>
- #include <algorithm>
- #include <cstring>
- #include <cmath>
- #include <queue>
- using namespace std;
- typedef long long ll;
- const int N=1e4+,M=5e4+,K=,INF=1e9+;
- inline int read(){
- char c=getchar();int x=,f=;
- while(c<''||c>''){if(c=='-')f=-;c=getchar();}
- while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
- return x*f;
- }
- int n,m,k,s,t,a,b,c,ans=INF;
- struct edge{
- int v,w,ne;
- }e[M<<];
- int cnt=,h[N];
- inline void ins(int u,int v,int w){
- cnt++;
- e[cnt].v=v;e[cnt].w=w;e[cnt].ne=h[u];h[u]=cnt;
- cnt++;
- e[cnt].v=u;e[cnt].w=w;e[cnt].ne=h[v];h[v]=cnt;
- }
- struct hn{
- int u,d,f;
- bool operator <(const hn &rhs)const{return d>rhs.d;}
- hn(int a=,int b=,int c=):u(a),d(b),f(c){}
- };
- int d[N][K],done[N][K];
- void dijkstra(int s){
- priority_queue<hn> q;
- for(int i=;i<n;i++) for(int j=;j<=k;j++) d[i][j]=INF;
- d[s][]=;
- q.push(hn(s,,));
- while(!q.empty()){
- hn x=q.top();q.pop();
- int u=x.u,f=x.f;
- if(done[u][f]) continue;
- done[u][f]=;//printf("dij %d %d %d\n",u,f,d[u][f]);
- for(int i=h[u];i;i=e[i].ne){
- int v=e[i].v,w=e[i].w;
- if(d[v][f]>d[u][f]+w){
- d[v][f]=d[u][f]+w;//printf("v %d %d %d\n",v,f,d[v][f]);
- q.push(hn(v,d[v][f],f));
- }
- if(f<k){
- if(d[v][f+]>d[u][f]){
- d[v][f+]=d[u][f];//printf("v %d %d %d\n",v,f+1,d[v][f+1]);
- q.push(hn(v,d[v][f+],f+));
- }
- }
- }
- }
- }
- int main(){
- freopen("move.in","r",stdin);
- freopen("move.out","w",stdout);
- n=read();m=read();k=read();s=read();t=read();
- for(int i=;i<=m;i++){
- a=read();b=read();c=read();
- ins(a,b,c);
- }
- dijkstra(s);
- for(int i=;i<=k;i++) ans=min(ans,d[t][i]);//,printf("%d %d\n",i,d[t][i]);
- printf("%d",ans);
- }
NOIP模拟赛20161007的更多相关文章
- 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 ...
随机推荐
- 详解SQLServer 存储过程
Sql Server的存储过程是一个被命名的存储在服务器上的Transacation-Sql语句集合,是封装重复性工作的一种方法,它支持用户声明的变量.条件执行和其他强大的编程功能. 存储过程相对于其 ...
- sql 中的Bulk和C# 中的SqlBulkCopy批量插入数据 ( 回顾 and 粗谈 )
通常,我们会对于一个文本文件数据导入到数据库中,不多说,上代码. 首先,表结构如下. 其次,在我当前D盘中有个文本文件名为2.txt的文件. 在数据库中,可以这样通过一句代码插入. Bulk in ...
- Android源码编译make的错误处理
android源码下载:官方下载 或参考android源码下载方式 Android编译版本: PLATFORM_VERSION=4.0.1(最新Android 4.0.1) OS 操作系统平台: Li ...
- java-阻塞队列
阻塞队列与普通队列的区别在于,当队列是空的时,从队列中获取元素的操作将会被阻塞,或者当队列是满时,往队列里添加元素的操作会被阻塞.试图从空的阻塞队列中获取元素的线程将会被阻塞,直到其他的线程往空的队列 ...
- Netty(二)入门
在上篇<Netty(一)引题>中,分别对AIO,BIO,PIO,NIO进行了简单的阐述,并写了简单的demo.但是这里说的简单,我也只能呵呵了,特别是NIO.AIO(我全手打的,好麻烦). ...
- 《C#微信开发系列(3)-获取接口调用凭据》
3.0获取接口调用凭据 ①接口说明 access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token.开发者需要进行妥善保存.access_token的存储至少要保留 ...
- c#使用json接口
前些日子将项目由使用数据库改版为使用接口,由于接口返回的xml中多了一些附加信息,导致xml转化后的DataTable无法储存在MemCache中.这时可以将xml序列化为其对应的类,当然由于当时对x ...
- JavaScript单元测试框架JsUnit基本介绍和使用
JavaScript单元测试框架JsUnit基本介绍和使用 XUnit framework XUnit是一套标准化的独立于语言的概念和结构集合,用于编写和运行单元测试(Unit tests). 每一个 ...
- 会话技术( Cookie ,Session)
会话技术: 会话:浏览器访问服务器端,发送多次请求,接受多次响应.直到有一方断开连接.会话结束. 解决问题:可以使用会话技术,在一次会话的多次请求之间共享数据. ...
- 敏捷开发XP
一.组建XP团队 在XP团队中,由以下组成 二.项目相关环境 1.利益相关者:与PM一样,对项目进行管理 2.执行发起人:最终客户(必须定期演示) 三.XP组成 四.思考 1.结 ...