自测时间:2017.4.12 8:15——11:45

实际得分:100+0+0=100

期望得分:100+100+0=260

T2 符合要求的总价值*符合要求的总个数

写成:符合要求的总价值*区间总个数

T3 正解贪心,DP式子退错了

http://cogs.pro/cogs/page/page.php?aid=16

T1 计算系数

时间限制:1 s   内存限制:128 MB

【问题描述】 
给定一个多项式 (ax+by)^k ,请求出多项式展开后 x^n*y^m 项的系数。 
【输入】 
输入文件名为 factor.in。 
共一行,包含 5 个整数,分别为 a,b,k,n,m,每两个整数之间用一个空格隔开。 
【输出】 
输出文件名为 factor.out。 
输出共 1 行,包含一个整数,表示所求的系数,这个系数可能很大,输出对 10007 取模后的结果

【输入输出样例】

factor.in

1 1 3 1 2

factor.out

3

【数据范围】 
对于 30%的数据,有 0≤k≤10; 
对于 50%的数据,有 a=1,b=1;
对于 100%的数据,有 0≤k≤1,000,0≤n,m≤k,且n+m=k,0≤a,b≤1,000,000。

递推杨辉三角

按x的指数升序排列,杨辉三角中第k+1行,m+1列为 (ax+by)^k 展开后 x^n*y^m项的系数

ans=f[k+1][m+1]*a^n*b^m

#include<cstdio>
#define mod 10007
int a,b,k,n,m,ans=;
int f[][];
using namespace std;
void mul(int a,int b)
{
a%=mod; b%=mod;
for(;b;b>>=,a=a*a%mod)
if(b&) ans=ans*a%mod;
}
int main()
{
freopen("factor.in","r",stdin);
freopen("factor.out","w",stdout);
scanf("%d%d%d%d%d",&a,&b,&k,&n,&m);
for(int i=;i<=k+;i++) f[i][]=;
for(int i=;i<=k+;i++)
for(int j=;j<=m;j++)
f[i][j]=(f[i-][j]+f[i-][j-])%mod;
mul(a,n);
mul(b,m);
ans=ans*f[k+][m]%mod;
printf("%d",ans);
}
#include<cstdio>
#define mod 10007
int a,b,k,n,m,ans=;
int f[][];
using namespace std;
void mul(int a,int b)
{
a%=mod; b%=mod;
for(;b;b>>=,a=a*a%mod)
if(b&) ans=ans*a%mod;
}
int main()
{
freopen("factor.in","r",stdin);
freopen("factor.out","w",stdout);
scanf("%d%d%d%d%d",&a,&b,&k,&n,&m);
for(int i=;i<=k+;i++) f[i][]=;
for(int i=;i<=k+;i++)
for(int j=;j<=m;j++)
f[i][j]=(f[i-][j]+f[i-][j-])%mod;
mul(a,n);
mul(b,m);
ans=ans*f[k+][m]%mod;
printf("%d",ans);
}

T2 聪明的质检员

时间限制:1 s   内存限制:128 MB

题目描述

小T 是一名质量监督员,最近负责检验一批矿产的质量。这批矿产共有 n 个矿石,从 1到n 逐一编号,每个矿石都有自己的重量 wi 以及价值vi 。检验矿产的流程是:

1 、给定m 个区间[Li,Ri];

2 、选出一个参数 W;

3 、对于一个区间[Li,Ri],计算矿石在这个区间上的检验值Yi:

这批矿产的检验结果Y 为各个区间的检验值之和。即:Y1+Y2...+Ym

若这批矿产的检验结果与所给标准值S 相差太多,就需要再去检验另一批矿产。小T

不想费时间去检验另一批矿产,所以他想通过调整参数W 的值,让检验结果尽可能的靠近

标准值S,即使得S-Y 的绝对值最小。请你帮忙求出这个最小值。

输入输出格式

输入格式:

输入文件qc.in 。

第一行包含三个整数n,m,S,分别表示矿石的个数、区间的个数和标准值。

接下来的n 行,每行2个整数,中间用空格隔开,第i+1 行表示 i 号矿石的重量 wi 和价值vi。

接下来的m 行,表示区间,每行2 个整数,中间用空格隔开,第i+n+1 行表示区间[Li,Ri]的两个端点Li 和Ri。注意:不同区间可能重合或相互重叠。

输出格式:

输出文件名为qc.out。

输出只有一行,包含一个整数,表示所求的最小值。

输入输出样例

输入样例#1:

5 3 15
1 5
2 5
3 5
4 5
5 5
1 5
2 4
3 3
输出样例#1:

10

说明

【输入输出样例说明】

当W 选4 的时候,三个区间上检验值分别为 20、5 、0 ,这批矿产的检验结果为 25,此

时与标准值S 相差最小为10。

【数据范围】

对于10% 的数据,有 1 ≤n ,m≤10;

对于30% 的数据,有 1 ≤n ,m≤500 ;

对于50% 的数据,有 1 ≤n ,m≤5,000;

对于70% 的数据,有 1 ≤n ,m≤10,000 ;

对于100%的数据,有 1 ≤n ,m≤200,000,0 < wi, vi≤10^6,0 < S≤10^12,1 ≤Li ≤Ri ≤n 。

检验结果随w的减小而增大,所以二分w判断检验结果与标准值的关系

#include<cmath>
#include<cstdio>
#include<algorithm>
#define N 200001
using namespace std;
int n,m,maxn;
long long s,sum[N];
int w[N],v[N],a[N],b[N],tot[N];
long long check(int k)
{
long long tmp=;
for(int i=;i<=n;i++)
if(w[i]>=k) sum[i]=sum[i-]+v[i],tot[i]=tot[i-]+;
else sum[i]=sum[i-],tot[i]=tot[i-];
for(int i=;i<=m;i++)
tmp+=abs(sum[b[i]]-sum[a[i]-])*(tot[b[i]]-tot[a[i]-]);
return tmp;
}
int main()
{
scanf("%d%d",&n,&m);
scanf("%lld",&s);
for(int i=;i<=n;i++) scanf("%d%d",&w[i],&v[i]),maxn=max(maxn,w[i]);
for(int i=;i<=m;i++) scanf("%d%d",&a[i],&b[i]);
int l=,r=maxn,mid;
long long ans1=1e15,ans2=1e15,tmp;
while(l<=r)
{
mid=l+r>>;
tmp=check(mid);
if(tmp<s) { ans1=s-tmp;r=mid-; }
else if(tmp==s) { printf(""); return ; }
else { ans2=tmp-s; l=mid+; }
}
printf("%lld",min(ans1,ans2));
}

T3 观光公交

时间限制:1 s   内存限制:128 MB

【问题描述】

风景迷人的小城Y 市,拥有n 个美丽的景点。由于慕名而来的游客越来越多,Y 市特意安排了一辆观光公交车,为游客提供更便捷的交通服务。观光公交车在第0 分钟出现在1号景点,随后依次前往2、3、4……n 号景点。从第i 号景点开到第i+1 号景点需要Di 分钟。
任意时刻,公交车只能往前开,或在景点处等待。
设共有m 个游客,每位游客需要乘车1 次从一个景点到达另一个景点,第i 位游客在Ti 分钟来到景点Ai,希望乘车前往景点Bi(Ai<bi)。为了使所有乘客都能顺利到达目的地,公交车在每站都必须等待需要从该景点出发的所有乘客都上车后才能出发开往下一景点
假设乘客上下车不需要时间。
一个乘客的旅行时间,等于他到达目的地的时刻减去他来到出发地的时刻。因为只有一辆观光车,有时候还要停下来等其他乘客,乘客们纷纷抱怨旅行时间太长了。于是聪明的司机ZZ 给公交车安装了k 个氮气加速器,每使用一个加速器,可以使其中一个Di 减1。对于同一个Di 可以重复使用加速器,但是必须保证使用后Di 大于等于0
那么ZZ 该如何安排使用加速器,才能使所有乘客的旅行时间总和最小?

【输入】

输入文件名为bus.in。
第1 行是3 个整数n, m, k,每两个整数之间用一个空格隔开。分别表示景点数、乘客数和氮气加速器个数。
第2 行是n-1 个整数,每两个整数之间用一个空格隔开,第i 个数表示从第i 个景点开往第i+1 个景点所需要的时间,即Di。
第3 行至m+2 行每行3 个整数Ti, Ai, Bi,每两个整数之间用一个空格隔开。第i+2 行表示第i 位乘客来到出发景点的时刻,出发的景点编号和到达的景点编号。

【输出】

输出文件名为bus.out。共一行,包含一个整数,表示最小的总旅行时间。

【输入输出样例】

3 3 2

1 4

0 1 3

1 1 2

5 2 3

输出:10

【输入输出样例说明】

对D2 使用2 个加速器,从2 号景点到3 号景点时间变为2 分钟。
公交车在第1 分钟从1 号景点出发,第2 分钟到达2 号景点,第5 分钟从2 号景点出发,第7 分钟到达3 号景点。
第1 个旅客旅行时间 7-0 = 7 分钟。
第2 个旅客旅行时间 2-1 = 1 分钟。
第3 个旅客旅行时间 7-5 = 2 分钟。
总时间 7+1+2 = 10 分钟。

【数据范围】

对于10%的数据,k=0;
对于20%的数据,0<=k<=1。
对于40%的数据,2 ≤ n ≤ 50,1 ≤ m≤ 1,000,0 ≤ k ≤ 20,0 ≤ Di ≤ 10,0 ≤ Ti ≤ 500;
对于60%的数据,1 ≤ n ≤ 100,1 ≤ m≤ 1,000,0 ≤ k ≤ 100,0 ≤ Di ≤ 100,0 ≤ Ti ≤ 10,000;
对于100%的数据,1 ≤ n ≤ 1,000,1 ≤ m ≤ 10,000,0 ≤ k ≤ 100,000,0 ≤ Di ≤ 100,0 ≤ Ti ≤ 100,000。
汽车最早到达景点i的时间get[i],
景点i最后一个游客出现时间last[i]
那么ans=Σ(get[b[i]]-t[i])=Σ get[b[i]]-Σt[i]
Σt[i]是定值,所以要最小化Σ get[b[i]]
d[i]表示从景点i-1到i所需时间
先算出不使用加速器的get :get[i]=max(get[i-1],last[i-1])+d[i]  
(从上一个景点的出发时间=到达上一个景点的时间 、 上一个经典游客的最晚出现时间  中较大的)
使用1个加速器 可以令答案减少 影响人数*1
所以枚举加速器,贪心的 用了加速器后影响人数 最多的地方
sum[i]表示在景点i下车的人数
data[i]表示 在景点i-1到景点i使用加速器可以影响的人数
初始data[i]=sum[i]
然后倒序枚举景点,若last[i]<get[i],(最后一个游客出现的时间比汽车到达时间早)
data[i]+=data[i+1]
然后找到最大的data[i],d[i]--,更新get[]
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,m,k;
int t[],a[],b[],d[],data[];
int gett[],last[],sum[],g[],ans;
int main()
{
/*freopen("bus.in","r",stdin);
freopen("bus.out","w",stdout);*/
scanf("%d%d%d",&n,&m,&k);
for(int i=;i<=n;i++) scanf("%d",&d[i]);
for(int i=;i<=m;i++)
{
scanf("%d%d%d",&t[i],&a[i],&b[i]);
last[a[i]]=max(last[a[i]],t[i]);
sum[b[i]]++;;
}
for(int i=;i<=n;i++) gett[i]=max(gett[i-],last[i-])+d[i];
//g[n]=n;
//for(int i=n-1;i>1;i--) g[i]= gett[i]>last[i] ? g[i+1] : i;
//for(int i=1;i<=n;i++) sum[i]+=sum[i-1];sum[n+1]=sum[n]+(sum[n]-sum[n-1]);
for(int i=;i<=m;i++) ans+=gett[b[i]]-t[i];
while(k--)
{
int maxn=,tmp=;
for(int i=n;i>;i--)
{
data[i]=sum[i];
if(last[i]<gett[i]) data[i]+=data[i+];
}
for(int i=;i<=n;i++)
//if(maxn<sum[g[i]+1]-sum[i]&&d[i]>0)
if(maxn<data[i]&&d[i]>)
{
//maxn=sum[g[i]+1]-sum[i];
maxn=data[i];
tmp=i;
}
ans-=maxn;
d[tmp]--;
for(int i=tmp;i<=n/*g[tmp]*/;i++) gett[i]=max(gett[i-],last[i-])+d[i];
//for(int i=g[tmp];i>=tmp;i--) g[i]= gett[i]>last[i] ? g[i+1] : i;
}
printf("%d",ans);
}

NOIP2011 提高组 Day2的更多相关文章

  1. [NOIP2011提高组day2]-3-观光公交

    3.观光公交 (bus.cpp/c/pas) [问题描述] 风景迷人的小城 Y 市,拥有 n 个美丽的景点.由于慕名而来的游客越来越多,Y 市特意安排了一辆观光公交车,为游客提供更便捷的交通服务.观光 ...

  2. [NOIP2011提高组day2]-2-聪明的质监员

    2.聪明的质监员(qc.cpp/c/pas) [问题描述] 小 T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有 n 个矿石,从 1到 n 逐一编号,每个矿石都有自己的重量 wi 以及价 ...

  3. [NOIP2011提高组day2]-1-计算系数

    1.计算系数 (factor.cpp/c/pas) [问题描述] k n m给定一个多项式(ax+by)^k ,请求出多项式展开后(x^n)*(y^m)项的系数. [输入] 输入文件名为 factor ...

  4. Noip2011 提高组 Day1 T1 铺地毯 + Day2 T1 计算系数

    Day1 T1 题目描述 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯.一共有 n 张地毯,编号从 1 到n .现在将这些地毯按照编号从小 ...

  5. [NOIP2011] 提高组 洛谷P1315 观光公交

    题目描述 风景迷人的小城Y 市,拥有n 个美丽的景点.由于慕名而来的游客越来越多,Y 市特意安排了一辆观光公交车,为游客提供更便捷的交通服务.观光公交车在第 0 分钟出现在 1号景点,随后依次前往 2 ...

  6. NOIP2011(提高组)DAY2---观光公交(vijosP1741)

    描述 风景迷人的小城Y市,拥有n个美丽的景点.由于慕名而来的游客越来越多,Y市特意安排了一辆观光公交车,为游客提供更便捷的交通服务.观光公交车在第0分钟出现在1号景点,随后依次前往2.3.4……n号景 ...

  7. [Luogu1313][NOIP2011提高组]计算系数

    题目描述 给定一个多项式 (by+ax)k(by+ax)^k(by+ax)k ,请求出多项式展开后 xn×ymx^n \times y^mxn×ym 项的系数. 输入输出格式 输入格式: 共一行,包含 ...

  8. 洛谷P1315 [NOIP2011提高组Day2T3] 观光公交

    P1315 观光公交 题目描述 风景迷人的小城Y 市,拥有n 个美丽的景点.由于慕名而来的游客越来越多,Y 市特意安排了一辆观光公交车,为游客提供更便捷的交通服务.观光公交车在第 0 分钟出现在 1号 ...

  9. 洛谷P1313 [NOIP2011提高组Day2T1]计算系数

    P1313 计算系数 题目描述 给定一个多项式(by+ax)^k,请求出多项式展开后x^n*y^m 项的系数. 输入输出格式 输入格式: 输入文件名为factor.in. 共一行,包含5 个整数,分别 ...

随机推荐

  1. DPDK flow_classify 源码阅读

    代码部分 /* SPDX-License-Identifier: BSD-3-Clause * Copyright(c) 2017 Intel Corporation */ #include < ...

  2. Mininet安装,简单实现一个网络拓扑结构

    安装mininet Mininet安装教程,可以按照这个来,然而这个虚拟机有时会很难装.可以考虑如下的做法:先 git clone,cd mininet 和 cat INSTALL之后,可以在提示信息 ...

  3. 【我的python之路】

    目录 我的python之路[第一章]字符编码集,数据类型 我的python之路[第二章]循环-内置方法-数据类型 我的python之路[第三章]函数 我的python之路[第四章]装饰器.生成器.迭代 ...

  4. angularJS1笔记-(3)-购物车增删改查练习

    html: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...

  5. Linux操作系统(三)

    文件系统: boot sector:记录引导文件 sb: super block 每个文件系统只有一个sb,其余black group均是它的备份 读写文件会进入到inode operation vf ...

  6. Current request is not a multipart request

    1. 文件上传需要在form表单中添加<form enctype="multipart/form-data"> 2. SpringMVC默认是关闭fileupload功 ...

  7. Alpha阶段敏捷冲刺⑦

    1.提供当天站立式会议照片一张. 每个人的工作 (有work item 的ID),并将其记录在码云项目管理中: 昨天已完成的工作. 账单明细和报表的界面设计在同一界面 今天要做的工作 对于报表扇形图的 ...

  8. CSS和JS引用图片(资源)的路径问题

    做项目时遇到了这个问题,特此写个笔记记一下

  9. SQL DATACOMPARE 实现两个数据库的同步处理.

    1. SQL DATACOMPARE 实现 两个数据库的同步 安装破解. 然后进行对比 然后进行 deploy 生成sql 等. 貌似很好用 但是前提是数据库是可用的... 这里面能够看到 生成的脚本 ...

  10. vsftpd重启失败解决方法

    vsftpd dead,but subsys locked vsftpd已死,但是subsys被锁 关于VSFTPD服务器重启失败,研究了一晚上,当virtual_use_local_privs=ye ...