[NOIP2011]刷水
前几天做了NOIP2011的题,感觉不是那么难。
这边先做了两天的前两题,T3还没打。
D1T1:顺次读入,分别判断是否覆盖即可,照例大水:
#include<cstdio>
int x,y,a[],b[],c[],d[],n,ans=-;
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)scanf("%d%d%d%d",a+i,b+i,c+i,d+i);
scanf("%d%d",&x,&y);
for(int i=;i<=n;i++)
if(a[i]<=x&&b[i]<=y&&c[i]+a[i]>=x&&d[i]+b[i]>=y)ans=i;
printf("%d",ans);
return ;
}
D1T2:一边扫过去,对于每家客栈,我们记下前一家相同色调的客栈,前一家能去的咖啡店,之前有多少家可以和这间客栈搭配和这是第几间该色调的客栈,然后如果前一家色调相同的客栈编号在前一家能去的咖啡店之前,说明这之前的客栈都能去,把可搭配客栈数更新后加入答案,否则直接加入答案。
代码如下:
#include<cstdio>
using namespace std;
int n,p,t[],h[],ans,l[],lst[];
int main()
{
scanf("%d%*d%d",&n,&p);
for(int i=;i<=;i++)lst[i]=;
for(int i=;i<=n;i++)
{
int w,c;
scanf("%d%d",&c,&w);
t[i]=t[i-]+(w<=p);
if(t[i]!=t[lst[c]-])h[c]=l[c];
l[c]++;
ans+=h[c];
if(w<=p)h[c]=l[c];
lst[c]=i;
}
printf("%d",ans);
return ;
}
D2T1:用杨辉三角计算组合数然后用二项式定理直接出解:
#include<cstdio>
const int mod=;
int a,b,k,n,m,C[][],aa=,bb=;
void calC()
{
C[][]=;
for(int i=;i<=;i++)
for(int j=;j<=i;j++)
C[i][j]=(C[i-][j-]+C[i-][j])%mod;
}
int main()
{
calC();
scanf("%d%d%d%d%d",&a,&b,&k,&n,&m);
a%=mod;b%=mod;
for(int i=;i<=n;i++)aa=(aa*a)%mod;
for(int i=;i<=m;i++)bb=(bb*b)%mod;
printf("%d",((aa*bb%mod)*C[k+][n+])%mod);
return ;
}
D2T2:使和标准最近,而且是单调递减,容易想到用二分答案+check
二分就不说了。check中我们要O(m)计算m个区间的sigma,可以对于二分出的x计算从1到n能加入答案的计算前缀和然后轻松处理。
要注意防止爆long long,这边处理方法是加个最优上限maxn,否则一定不优。
代码如下:
#include<cstdio>
const long long maxn=10000000000000ll;
long long mn(long long x,long long y){return x<y?x:y;}
long long s[],ans=maxn,sa,v[],w[],sum[],l[],r[],ll,rr,n,m,mid;
bool check(long long x)
{
long long tt=;
for(int i=;i<=n;++i)
sum[i]=sum[i-]+(w[i]>=x),
s[i]=s[i-]+(w[i]>=x?v[i]:);
for(int i=;i<=m;++i)
{
tt+=(sum[r[i]]-sum[l[i]-])*(s[r[i]]-s[l[i]-]);
if(tt>maxn)return ;
}
ans=mn(-mn(tt-sa,sa-tt),ans);
return tt<=sa;
}
void bina()
{
ll=;rr=;
while(ll<rr)
{
mid=(ll+rr)/;
check(mid)?rr=mid:ll=mid+;
}
}
int main()
{
scanf("%lld%lld%lld",&n,&m,&sa);
for(int i=;i<=n;++i)scanf("%lld%lld",w+i,v+i);
for(int i=;i<=m;++i)scanf("%lld%lld",l+i,r+i);
bina();
check(mid-);check(mid);
printf("%lld",ans);
return ;
}
[NOIP2011]刷水的更多相关文章
- [洛谷U22157]刷水题(数位dp)(hash)
题目背景 做正经题是不可能做正经题的,这辈子都不可能做正经题的,毒瘤题又不会做毒瘤题,就是水题这种东西,才维持了蒟蒻的信心: 题目描述 这里有N+1 道水题,编号分别为0 ~N+1 ,每道水题都有它自 ...
- bzoj刷水
因为最近的生活太颓废总是不做题而被老师D了一番, 所以今天晚上到bzoj上去刷了几道水题..... bzoj 4320: ShangHai2006 Homework 题目大意 维护一个支持两个操作 ...
- [暑假的bzoj刷水记录]
(这篇我就不信有网站来扣) 这个暑假打算刷刷题啥的 但是写博客好累啊 堆一起算了 隔一段更新一下. 7月27号之前刷的的就不写了 , 写的累 代码不贴了,可以找我要啊.. 2017.8.27upd ...
- 【刷水】之USACO2008资格赛(Bzoj1599-1603)
做之前真是没想到有这么水>.< 但做了还是发上来吧>.< 就当是刷一刷AC量&1A率什么的>.< Bzoj1599: [Usaco2008 Oct]笨重的石 ...
- Luogu USACO Training 刷水记录
开个坑记录一下刷USACO的Training的记录 可能会随时弃坑 只有代码和做法简述 可能没有做法简述 [USACO1.1]你的飞碟在这儿Your Ride Is He… 模拟,细节已忘 #incl ...
- Codeforces 刷水记录
Codeforces-566F 题目大意:给出一个有序数列a,这个数列中每两个数,如果满足一个数能整除另一个数,则这两个数中间是有一条边的,现在有这样的图,求最大联通子图. 题解:并不需要把图搞出来, ...
- bzoj 刷水
bzoj 3856: Monster 虽然是sb题,,但是要注意h可能<=a,,,开始忘记判了WA得很开心. #include <iostream> #include <cst ...
- USACO 刷水
BZOJ 1666 水.. BZOJ 1579 分层图最短路. BZOJ 1782 从一开始若某头牛停在U,那么U的子树的时间都会加一用BIT维护DFS序就行了 BZOJ 1572 贪心+堆 排序后查 ...
- usaco silver刷水~其实是回顾一下,补题解
[BZOJ1606][Usaco2008 Dec]Hay For Sale 裸01背包 ;i<=n;i++) for(int j=m;j>=a[i];j--) f[j]=max(f[j], ...
随机推荐
- BZOJ 1791 岛屿(环套树+单调队列DP)
题目实际上是求环套树森林中每个环套树的直径. 对于环套树的直径,可以先找到这个环套树上面的环.然后把环上的每一点都到达的外向树上的最远距离作为这个点的权值. 那么直径一定就是从环上的某个点开始,某个点 ...
- 使用for循环遍历数组元素
循环可以将代码块执行指定的次数.如果您希望一遍又一遍地运行相同的代码,并且每次的值都不同,那么使用循环是很方便的.迭代语句又叫循环语句. JavaScript 支持不同类型的循环: for - 循环代 ...
- CentOS 安装MariaDB
1.安装 #同时安装mariadb和mariadb-server [root@bigdata-senior01 yum.repos.d]# yum -y install mariadb mariadb ...
- 【题解】HNOI2016序列
也想了有半天,没有做出来……实际上做法确实也是十分精妙的.这里推荐一个blog,个人认为这位博主讲得挺好了:Sengxian's Blog; 感觉启示是:首先要加强对莫队算法 & ST表的熟练 ...
- 最小角回归 LARS算法包的用法以及模型参数的选择(R语言 )
Lasso回归模型,是常用线性回归的模型,当模型维度较高时,Lasso算法通过求解稀疏解对模型进行变量选择.Lars算法则提供了一种快速求解该模型的方法.Lars算法的基本原理有许多其他文章可以参考, ...
- 常见的shell命令总结
1.查看一个程序是否运行 ps –ef|grep tomcat 查看所有有关tomcat的进程 2.终止线程 kill -9 2222 3.查看文件,包含隐藏文件 ls -al 4.当前 ...
- httpClient需要的jar包
- bzoj 1564 [NOI2009]二叉查找树 区间DP
[NOI2009]二叉查找树 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 906 Solved: 630[Submit][Status][Discu ...
- bzoj 1132 [POI2008]Tro 几何
[POI2008]Tro Time Limit: 20 Sec Memory Limit: 162 MBSubmit: 1796 Solved: 604[Submit][Status][Discu ...
- [LeetCode] 12. Integer to Roman ☆☆
Given an integer, convert it to a roman numeral. Input is guaranteed to be within the range from 1 t ...