9.2 NOIP模拟

题目名称

“与”

小象涂色

行动!行动!

输入文件

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。而对于2进制,越高位有1,数字越大。
所以我们可以考虑将所给数列的数字看成二进制,从二进制最高位向下枚举
若有大于等于两个数"这一位上为1",那么最终结果的这一位肯定是1,
于是我们就可以将所有"这一位上为1"的数保留下来,
剩下的数舍弃;而若有少于两个数"这一位上为1",则这一位上一定为0。
*/
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<cmath>
#include<algorithm> using namespace std;
int n,a[],d[],ans; void init()
{
scanf("%d",&n);
for(int i=; i<=n; i++) scanf("%d",&a[i]);
} void find()
{
int i,j,ct,now=n,t;
for(i=; i>=; i--)
{
ct=;
for(j=; j<=now; j++) if(a[j]&(<<i)) ct++;
if(ct<) continue;
t=;d[i]=;
for(j=; j<=now; j++) if(a[j]&(<<i)) a[++t]=a[j];
now=t;
}
for(i=; i>=; i--) if(d[i]) ans=ans^(<<i);
printf("%d\n",ans);
} int main()
{
freopen("and.in","r",stdin);
freopen("and.out","w",stdout);
init();find();
return ;
}

小象涂色

(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

/*
dp[i][j][k]表示第i个箱子第j次染色,染为k颜色的概率。
时间复杂度过高,只能拿部分分
对于每个箱子,它们的本质是相同的,也就是第几个箱子这一维状态是不需要存在的。
dp[i][j]表示染色i次颜色为j的概率
  dp[i+1][j]+=dp[i][j]/2; 上次不染色
  dp[i+1][j*x%c]+=dp[i][j] /2 /c; (x枚举颜色) 上次染色,染成x
最后期望Σdp[cnt[i]][j]*j;
*/
#include<iostream>
#include<cstdio>
#include<cstring> #define N 107 using namespace std;
int n,m,tot,c,k,t,l,r,cnt[N];
double dp[N][N],ans; void init()
{
memset(dp,,sizeof dp);
memset(cnt,,sizeof cnt);
tot=;ans=;
scanf("%d%d%d",&n,&c,&k);
for(int i=;i<=k;i++)
{
scanf("%d%d",&l,&r);
for(int j=l;j<=r;j++)
{
cnt[j]++;tot=max(tot,cnt[j]);
}
}
} void DP()
{
dp[][]=;
for(int i=;i<tot;i++)
{
for(int j=;j<c;j++)
{
dp[i+][j]+=dp[i][j]/;
for(int x=;x<c;x++) dp[i+][(j*x)%c]+=dp[i][j]/(*c);
}
} for(int i=;i<=n;i++)
for(int j=;j<c;j++)
ans+=dp[cnt[i]][j]*j;
printf("%.9f\n",ans);
} int main()
{
scanf("%d",&t);
while(t--)
{
init();DP();
}
return ;
}

行动!行动!

(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.

/*
分层图spfa 应该只有70,卡spfa...要加优化,懒得加了。
*/
#include<iostream>
#include<cstdio>
#include<cstring> #define N 10001
#define M 100001 using namespace std;
int head[N],d[N][11],q[M][2];
bool inq[N][11];
int n,m,k,st,ed,cnt;
struct edge
{
int u,to,dis,next;
}e[M]; inline int read()
{
int x=0,f=1;char c=getchar();
while(c>'9'||c<'0'){if(c=='-')f=-1;c=getchar();}
while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
return x*f;
} inline void add(int u,int to,int dis)
{
e[++cnt].to=to;e[cnt].dis=dis;e[cnt].next=head[u];head[u]=cnt;
} void spfa()
{
memset(d,127/3,sizeof d);
int he=0,ta=1;
q[0][0]=st;q[0][1]=0;
inq[st][0]=1;d[st][0]=0;
while(he!=ta)
{
int now=q[he][0],tmp=q[he++][1];inq[now][tmp]=0;
if(he==100001) he=0;
for(int i=head[now];i;i=e[i].next)
{
int v=e[i].to;
if(d[v][tmp]>d[now][tmp]+e[i].dis)
{
d[v][tmp]=d[now][tmp]+e[i].dis;
if(!inq[v][tmp])
{
q[ta][0]=v;q[ta++][1]=tmp;
inq[v][tmp]=1;
if(ta==100001) ta=0;
}
}
if(d[v][tmp+1]>d[now][tmp] && tmp<k)
{
d[v][tmp+1]=d[now][tmp];
if(!inq[v][tmp+1])
{
inq[v][tmp+1]=1;
q[ta][0]=v;q[ta++][1]=tmp+1;
if(ta==100001) ta=0;
}
}
}
}
int ans=0x7fffffff;
for(int i=0;i<=k;i++) ans=min(ans,d[ed][i]);
printf("%d",ans);
} int main()
{
int x,y,z;
n=read();m=read();k=read();
st=read();ed=read();
while(m--)
{
x=read();y=read();z=read();
add(x,y,z);add(y,x,z);
}
spfa();
return 0;
}

  

9.2NOIP模拟题的更多相关文章

  1. poj 1008:Maya Calendar(模拟题,玛雅日历转换)

    Maya Calendar Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 64795   Accepted: 19978 D ...

  2. poj 1888 Crossword Answers 模拟题

    Crossword Answers Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 869   Accepted: 405 D ...

  3. CodeForces - 427B (模拟题)

    Prison Transfer Time Limit: 1000MS   Memory Limit: 262144KB   64bit IO Format: %I64d & %I64u Sub ...

  4. sdut 2162:The Android University ACM Team Selection Contest(第二届山东省省赛原题,模拟题)

    The Android University ACM Team Selection Contest Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里 ...

  5. 全国信息学奥林匹克联赛 ( NOIP2014) 复赛 模拟题 Day1 长乐一中

    题目名称 正确答案  序列问题 长途旅行 英文名称 answer sequence travel 输入文件名 answer.in sequence.in travel.in 输出文件名 answer. ...

  6. UVALive 4222 Dance 模拟题

    Dance 题目连接: https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&pag ...

  7. cdoj 25 点球大战(penalty) 模拟题

    点球大战(penalty) Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/problem/show/2 ...

  8. Educational Codeforces Round 2 A. Extract Numbers 模拟题

    A. Extract Numbers Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/600/pr ...

  9. URAL 2046 A - The First Day at School 模拟题

    A - The First Day at SchoolTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudg ...

随机推荐

  1. C++ 类的初始化列表

    class Animal{public: Animal(int weight,int height): //A初始化列表 m_weight(weight), m_height(height) { } ...

  2. iconfig1

    #include<iostream> using namespace std; //测试 template 里面是否还可以有 template class alloc{ }; templa ...

  3. Liunx学习笔记(三) 文件权限

    一.文件权限 1.查看文件权限 (1)文件权限 在 Linux 中对于文件有四种访问权限,列举如下: 可读取:r,Readable 可写入:w,Writable 可执行:x,Execute 无权限:- ...

  4. 爬虫实战(一) 用Python爬取百度百科

    最近博主遇到这样一个需求:当用户输入一个词语时,返回这个词语的解释 我的第一个想法是做一个数据库,把常用的词语和词语的解释放到数据库里面,当用户查询时直接读取数据库结果 但是自己又没有心思做这样一个数 ...

  5. BZOJ 4385 洛谷3594 POI2015 WIL-Wilcze doły

    [题解] 手残写错调了好久QAQ...... 洛谷的数据似乎比较水.. n个正整数!!这很重要 这道题是个类似two pointer的思想,外加一个单调队列维护当前区间内长度为d的子序列中元素之和的最 ...

  6. 【Codeforces 140C】New Year Snowmen

    [链接] 我是链接,点我呀:) [题意] 题意 [题解] 每次都选择剩余个数最多的3个不同数字组成一组. 优先消耗剩余个数多的数字 这样能尽量让剩余的数字总数比较多,从而更加可能得到更多的3个组合 [ ...

  7. 阿里云服务器Ubuntu 16.04 3安装mysql

    .更新系统 apt-get update [注意:要在root用户下] .安装mysql-server apt-get install mysql-serverapt-get install mysq ...

  8. 使用pycharm学习django纪实

    之前已经下了python3.7 首先官网下载pycharm专业版,然后利用学生邮箱激活 新建django项目,使用虚拟环境就好了,方便之后的服务器部署(大概 找到博客开始学习:https://blog ...

  9. R - Milking Time DP

    Bessie is such a hard-working cow. In fact, she is so focused on maximizing her productivity that sh ...

  10. Oracle中的 row_number() over (partition by order by ) 用法

    oracle 里面经常这样用 select col1,col2..., row_number() over (partition by colx order by coly) from table_n ...