NOIP2005 篝火晚会
来源:互联网 发布:高级软件测试工程师 编辑:程序博客网 时间:2024/04/28 00:29
题目:http://www.luogu.org/problem/show?pid=1053#
分析:置换群.
首先理解题意:b1,b2,..bn是无限制的,并非连续,并非递增,随便选。于是可以形成若干个环,一个环的花费是这个环包含的元素个数。
所以,最小花费就是多少个人不在应在的位置上。
再,多少个人不在应在的位置上=n-最多多少人在应在的位置上。
然后,这个可以用偏移量求,求偏移量中包含元素最多的,这个就是最多多少人在应在的位置上。
用n减去这个值就是答案
因为是一个环没有方向,所以初始状态1..n和n..1都要算一遍。
代码:
#include <cstdio>#include <algorithm>#include <cstring>using namespace std;const int Tmax=1000005;int n,m,w[Tmax],v[Tmax],L[Tmax],R[Tmax],Tmaxw;long long int S,sumn[Tmax],sumv[Tmax];long long int check(int num){ int i; long long int ans=0; for(i=1;i<=n;i++) { sumn[i]=sumn[i-1]; sumv[i]=sumv[i-1]; if(w[i]>=num) sumn[i]++,sumv[i]+=v[i]; } for(i=1;i<=m;i++) ans+=(sumn[R[i]]-sumn[L[i]-1])*(sumv[R[i]]-sumv[L[i]-1]); return S-ans;}void work(){ int l=0,r=Tmaxw+2,mid; while(r>l) { mid=(l+r+1)/2; if(check(mid)<=0) l=mid; else r=mid-1; } printf("%lld",min(abs(check(l)),check(l+1))); return ;}int main(){ int i; scanf("%d%d%lld",&n,&m,&S); for(i=1;i<=n;i++) { scanf("%d%d",&w[i],&v[i]); Tmaxw=max(Tmaxw,w[i]); } for(i=1;i<=m;i++) scanf("%d%d",&L[i],&R[i]); work(); return 0;}
0 0
- 【模拟】篝火晚会(noip2005)
- NOIP2005 篝火晚会
- NOIP2005篝火晚会
- NOIP2005 篝火晚会
- [codevs1106][NOIP2005]篝火晚会
- noip2005 篝火晚会 (模拟)
- noip2005篝火晚会 2008.10.18
- 洛谷 P1053 [NOIP2005 T3] 篝火晚会
- [NOIP2005][CODEVS1106]篝火晚会(模拟+数学相关)
- 【NOIP2005提高组T3】篝火晚会-置换群
- noip2005提高组篝火晚会 && nyoj59题小明活动的组织任务
- 篝火晚会 题解
- VIJOS 1008 篝火晚会
- Vijos1008 篝火晚会
- Codevs 1106 篝火晚会
- RQNOJ 篝火晚会
- RQNOJ-19 篝火晚会
- P1053 篝火晚会
- 录音/播放音频
- Legacy animation system
- Afaira服务器上报错NDEF invalid "Operation" tag
- AC自动机+快速矩阵幂 poj2778 DNA Sequence
- Ubuntu 15.10 Wily sudo apt-get update 出现Hash Sum mismatch解决方案
- NOIP2005 篝火晚会
- IT 项目管理制度
- clipChildren+clipToPadding+ListView的妙用
- java socket多线程
- 链表相加
- srpingmvc-restful风格学习总结
- 升级Afaria以后,Afaria不能启动
- iOS面试题<一>
- 精简ttf字体文件