全国信息学奥林匹克联赛(NOIP2011)复赛提高组day2
Posted liuyi854854
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了全国信息学奥林匹克联赛(NOIP2011)复赛提高组day2相关的知识,希望对你有一定的参考价值。
一、计算系数
首先对题目多项式进行简化分析
(x+y)2=x2+2xy+y2
(x+y)3=x3+3x2y+3xy2+y2
(x+y)4=x4+4x3y+6x2y2+4xy3+y4
不难发现它们的系数组成了一个杨辉三角
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
……
进一步带入则可得
(ax+by)2=a2x2+2abxy+b2y2
(ax+by)3=a3x3+3a2bx2y+3ab2xy2+b3y3
(ax+by)4=a4x4+4a3bx3y+6a2b2x2y2+4ab3xy3+b4y4
……
于是得(ax+by)k中xnym项的系数为(杨辉三角的第(k+1)行第(m+1)或(k-n+1)个的值*(anbm))的值
下面为代码:
#include<bits/stdc++.h>
#define mod 10007
using namespace std;
long long a,b,k,n,m;
long long yh[5010][5010];
int Pow(int x,int y)//计算幂
long long r=1;
for(long long i=1;i<=y;i++)
r*=x;
if(r>=mod)r%=mod;
return r;
void dfs(int x,int y)//杨辉三角
if(y>x)dfs(x+1,1);
else
yh[x][y]=yh[x-1][y]+yh[x-1][y-1];
if(yh[x][y]>=mod)yh[x][y]%=mod;
if(x==k+1&&y==m+1)
cout<<(yh[x][y]*Pow(a,n)*Pow(b,m))%mod;
return;
dfs(x,y+1);
int main()
cin>>a>>b>>k>>n>>m;
yh[1][1]=1;
dfs(2,1);
二、聪明的质检员
三、观光公交
这道题本人主要就是贪心思想
首先记录每个景点最后一个乘客来到出发地的时间与这个景点(从前一个景点来)最迟到达时的时间。然后分析在哪个时刻使用氮气加速才是省时最多的(贪心):当这个景点的乘客开始等待时,公交还在来的路上,即这个景点的到达时间晚于最后一个乘客来到出发地的时候,使用氮气加速器可以减少乘客等待的时间。但也许会有很多个这种时候,所以要将它们记录下来,每次加速取省时最多的,再更新再继续进行此操作直到此时氮气加速器使用完(途中注意D[i]>0)
代码如下:
#include<bits/stdc++.h>
using namespace std;
int n,m,k;
int d[1010];
int t,a,b;
int num[1010],times[1010],wait[1010],rest[1010];
int ans=0;
int main()
cin>>n>>m>>k;
for(int i=2;i<=n;i++)
scanf("%d",&d[i]);
for(int i=1;i<=m;i++)
scanf("%d%d%d",&t,&a,&b);
wait[a]=max(wait[a],t);
ans-=t;
num[b]++;
for(int i=2;i<=n;i++)
times[i]=max(wait[i-1],times[i-1])+d[i];
for(int i=1;i<=k;i++)
for(int j=n;j>=2;j--)
rest[j]=num[j];
if(wait[j]<times[j])rest[j]+=rest[j+1];
int maxn=-1,u=0;
for(int j=2;j<=n;j++)
if(rest[j]>maxn&&d[j]>0)
maxn=rest[j];
u=j;
d[u]--;
for(int j=u;j<=n;j++)
times[j]=max(wait[j-1],times[j-1])+d[j];
for(int i=2;i<=n;i++)ans+=num[i]*times[i];
printf("%d",ans);
其中有点难理解的地方:
ans:如果在后面减去t也没有问题,只是分开更简洁些
rest[]:如果在第i路段加速造福的乘客(能被减少等待时间的乘客数)
times[]:到达第i景点的时间
num[]:在第i个景点下车的乘客数
wait[]:第i个景点最后一个来到的乘客的时间
第22届全国青少年信息学奥林匹克联赛(浙江赛区)复赛通知
各市科协、教育局,各有关学校:
第22届全国青少年信息学奥林匹克联赛初赛已结束。全省共有5000余名选手参加了初赛。根据赛程安排,复赛将于2016年11月19-20日在衢州举行。现将复赛有关事项通知如下:
一、参加复赛选手:
1、全省统一划线产生的选手。
2、各市按规定名额推荐的选手。
3、上届联赛优秀参赛学校和2016年集训、复赛承办学校的奖励名额。
推荐、奖励名额选手须从已参加初赛的选手中产生。所有参加复赛的选手须在NOI网站上注册,并由所在学校NOI活动负责人或本人的指导教师审核通过。
二、复赛时间与地点:
时间:第一试:11月19日(周六),提高组8:30-12:00,普及组14:30-18:00;第二试(仅提高组选手参加):11月20日(周日),8:30-12:00。
地点:衢州第二中学、衢州华茂外国语学校、书院中学。
三、报到:
各市领队或指导教师负责报到等事项,竞赛时各选手必须携带身份证(户口本、护照等)和学生证(校园卡)或学校证明(须贴照片,学校盖骑缝章)。
提高组:报到时间:11月18日12:30-18:00
普及组:报到时间:11月18日12:30-18:00
11月19日8:30-13:00
报到地点:衢州第二中学图书馆一楼门厅。
四、复赛形式:
采用上机编程的考核方式。竞赛环境为windows或Linux操作系统,竞赛语言为PASCAL、C 、C++,选手可自行选择操作系统和语言。
五、测试:
比赛结束后,省竞赛委员会办公室将参赛选手的源程序发送至中国计算机学会参加评测。成绩发布及申诉事项请参见NOI网站相关规定。
六、参赛费用及食宿安排:
根据中国计算机学会的相关规定,提高组选手收取参赛费用280元/人,普及组选手收取参赛费用150元/人。指导教师收取100元/人。所有人员食宿、往返交通费用自理。
省竞赛委员会办公室将于近日发布当地宾馆、交通路线等信息,参赛人员请在http://noip.zjqzez.com/index.aspx查询并登记信息。
七、11月18日19:30,将在衢州二中博文楼会议室召开省竞赛委员会工作会议,请各委员按时参加。
八、联系方式:
省竞赛委员会办公室:赵国治 0571-85090520
住宿:王荣明 15068965965
机房:吴臣翔 15105703939
其他:叶敏红 13757055655
九、其他事项:
中国计算机学会相关资料查阅地址:http://www.noi.cn/;浙江赛区有关资料下载地址:http://zhejiang.xiaoxiaotong.org。
以上是关于全国信息学奥林匹克联赛(NOIP2011)复赛提高组day2的主要内容,如果未能解决你的问题,请参考以下文章
2012第十八届全国青少年信息学奥林匹克联赛(NOIP2012)初赛提高组答案