#include<cassert>
#include<cstdio>
#include<vector>
using namespace std;
const int maxm=,maxt=,maxn=;
int seq[maxm];
int cnt[maxt];
vector<int> to[maxn];
int n,T;
int vis[maxn],timer=;
int ext[maxn];
bool flag;
void dfs(int x){
vis[x]=timer;
for(vector<int>::iterator pt=to[x].begin();pt!=to[x].end();++pt){
if(vis[*pt]!=timer){
dfs(*pt);;
}else if(ext[*pt]!=timer)flag=false;
}
ext[x]=timer;
}
bool toposort(){
++timer;flag=true;
for(int i=;i<=n;++i){
if(vis[i]!=timer)dfs(i);
}
return flag;
}
bool check(int x){
if(x==)return true;
for(int i=;i<=n;++i)to[i].clear();
for(int i=;i<=x;++i){
for(int j=cnt[i-]+;j<cnt[i];++j){
to[seq[j]].push_back(seq[j+]);
}
}
return toposort();
}
int main(){
freopen("dandelion.in","r",stdin);
freopen("dandelion.out","w",stdout);
scanf("%d%d",&n,&T);
for(int i=;i<=T;++i){
scanf("%d",cnt+i);
cnt[i]+=cnt[i-];if(cnt[i]>maxm)assert();
for(int j=cnt[i-]+;j<=cnt[i];++j){
scanf("%d",seq+j);
}
}
int l=,r=T;
while(l<=r){
int mid=(l+r)>>;
if(check(mid))l=mid+;
else r=mid-;
}
assert(cnt[T]<=);
printf("%d\n",l-);
//printf("%d\n",cnt[T]);
return ;
}

dandelion

 #include<cstdio>
#include<cstring>
#include<cassert>
#include<vector>
using namespace std;
const int maxn=;
vector<int> to[maxn];
int deg[maxn];
int vis[maxn];int timer=;
int cntodd=;
void dfs(int x){
vis[x]=timer;
if(deg[x]&)cntodd++;
for(vector<int>::iterator pt=to[x].begin();pt!=to[x].end();++pt){
if(vis[*pt]!=timer)dfs(*pt);
}
}
int sumN=,sumM=;
void work(){
int n,m;scanf("%d%d",&n,&m);sumN+=n;sumM+=m;
//assert(n<=m);//printf("%d %d\n",n,m);
for(int i=;i<=n;++i)deg[i]=;
int a,b;
for(int i=;i<=m;++i){
scanf("%d%d",&a,&b);deg[a]++;deg[b]++;
to[a].push_back(b);to[b].push_back(a);
}
// assert(deg[0]==0);
++timer;
int cntblock=;
int ans=;
int cntodd0=;
for(int i=;i<=n;++i){
if(deg[i]!=&&vis[i]!=timer){
cntblock++;
cntodd=;dfs(i);
if(cntodd>)ans+=(cntodd-)/;
if(i==)cntodd0=cntodd;
}
}// assert(cntblock==1);
if(cntblock==)printf("0\n");
else if(cntblock==){
if(deg[]==){
printf("%d\n",+ans);
}else{
printf("%d\n",cntodd0/);
}
}else{
if(deg[]==)printf("%d\n",cntblock+ans+);
else printf("%d\n",cntblock+ans);
}
for(int i=;i<=n;++i)to[i].clear();
}
int main(){
freopen("vine.in","r",stdin);
freopen("vine.out","w",stdout);
int T;scanf("%d",&T);
while(T--){
work();
}
assert(sumN<=);assert(sumM<=);
return ;
}

vine

 #include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
const int maxn=;
int w[maxn],v[maxn];
int n,L,R;
double seq[maxn];
bool check(double x){
for(int i=;i<=n;++i){
seq[i]=v[i]-x*w[i];
}
sort(seq+,seq+n+);
double sum=;
for(int i=;i<=L;++i)sum+=seq[n+-i];
return sum>=0.0;
}
int C(int n,int m){//printf("%d %d\n",n,m);
if(n-m<m)m=n-m;
long long ans=;
for(int i=;i<m;++i){
ans=ans*(n-i);//printf("%lld\n",ans);
}
for(int i=;i<=m;++i)ans=ans/i;
return (int)ans;
}
int calc(double ans){
for(int i=;i<=n;++i)seq[i]=v[i]-ans*w[i];
sort(seq+,seq+n+);
for(int i=;i<n+-i;++i)swap(seq[i],seq[n+-i]);
// for(int i=1;i<=n;++i)printf("%.7f\n",seq[i]);
int hi=L,lo=L;
while(hi<n&&abs(seq[hi]-seq[hi+])<1e-)++hi;
while(lo>&&abs(seq[lo]-seq[lo-])<1e-)--lo;
//printf("%.5f %.5f\n",ans,seq[L]);
// printf("%d %d\n",lo,hi);
if(abs(seq[L])<1e-){
int ans=;
for(int i=L;i<=R&&i<=hi;++i)ans+=C(hi,i);
return ans;
}else{
return C(hi-lo+,L-lo+);
}
}
int main(){
freopen("white.in","r",stdin);
freopen("white.out","w",stdout);
scanf("%d%d%d",&n,&L,&R);
for(int i=;i<=n;++i)scanf("%d%d",w+i,v+i);
double l=0.1,r=;
while(r-l>1e-){
double mid=(l+r)/2.0;
if(check(mid))l=mid;
else r=mid;
}
printf("%.3f\n",(l+r)/2.0);
printf("%d\n",calc((l+r)/2.0));
return ;
}

white

 #include<cstdio>
//#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
#include<cassert>
#define INF 0x3f3f3f3f
#define re register
#define Ii inline int
#define Il inline long long
#define Iv inline void
#define Ib inline bool
#define Id inline double
#define ll long long
#define Fill(a,b) memset(a,b,sizeof(a))
#define R(a,b,c) for(register int a=b;a<=c;++a)
#define nR(a,b,c) for(register int a=b;a>=c;--a)
#define Min(a,b) ((a)<(b)?(a):(b))
#define Max(a,b) ((a)>(b)?(a):(b))
#define Cmin(a,b) ((a)=(a)<(b)?(a):(b))
#define Cmax(a,b) ((a)=(a)>(b)?(a):(b))
#define abs(a) ((a)>0?(a):-(a))
#define D_e(x) printf("&__ %d __&\n",x)
#define D_e_Line printf("-----------------\n")
#define Pause system("pause");
using namespace std;
const int N=;
Ii read(){
int s=,f=;char c;
for(c=getchar();c>''||c<'';c=getchar())if(c=='-')f=-;
while(c>=''&&c<='')s=s*+(c^''),c=getchar();
return s*f;
}
Iv print(int x){
if(x<)putchar('-'),x=-x;
if(x>)print(x/);
putchar(x%^'');
}
vector<int>V[N];
int deg[N],vis[N],tim,sum_odd;
Iv dfs(int x){
vis[x]=tim;
if(deg[x]&)++sum_odd;
for(vector<int>::iterator it=V[x].begin();it!=V[x].end();++it)
if(vis[*it]!=tim)
dfs(*it);
}
int main(){
freopen("vine.in","r",stdin),freopen("vine.out","w",stdout);
int T=read();
while(T--){
int n=read(),m=read(),tag=,ans=,odd_0=;;
R(i,,n)deg[i]=,vector<int>().swap(V[i]);
R(i,,m){
int u=read(),v=read();
++deg[u],++deg[v],
V[u].push_back(v),V[v].push_back(u);
}
++tim;
R(i,,n)
if(deg[i]&&vis[i]!=tim){
++tag,
sum_odd=,
dfs(i);
if(sum_odd>)ans+=(sum_odd-)>>;
if(i==)odd_0=sum_odd;
}
if(tag==)
printf("0\n");
else if(tag==){
deg[]?
printf("%d\n",odd_0>>):
printf("%d\n",+ans);
}
else
printf("%d\n",tag+ans+(deg[]==));
}
return ;
}

vine_Main

模拟题 day1
出题人: liu_runda
题目名称 山藤 蒲公英 白蛇相簿
源程序文件名 vine.cpp dandelion.cpp white.cpp
输入文件名 vine.in dandelion.in white.in
输出文件名 vine.out dandelion.out white.out
每个测试点时限 1s 1s 1s
内存限制 512MB 512MB 512MB
测试点数目 10 10 10
每个测试点分值 10 10 10
是否打开O2 优化 是 是 是
在windows 下用lemon 进行测试.
山藤(vine)
【题目描述】
许宣生性好动.在山中,要想快速移动,就需要借助山间一根根藤蔓.
每根藤蔓的两端,要么在地面,要么连在一块石头上.藤蔓不会两端都在地面,也不会
两端都在同一块石头上,但是有可能两端各在一块石头上.两个地点之间可能有多条藤蔓.
许宣可以沿着藤蔓攀爬,从藤蔓一端攀爬到另一端,由于藤蔓脆弱,一条藤蔓只能经过
一次,之后就会断掉.
一共有n 块石头,m 条藤蔓.石头编号从1 到n,地面编号为0.
许宣现在想从地面出发,攀爬经过所有藤蔓之后,回到地面.许宣拥有一种特殊道具,
飞爪,可以让他从一个地点到达另外任意一个地点,但是他想尽量少使用飞爪.请问许宣最
少需要使用多少次飞爪?
【输入格式】
多组数据,第一行一个数字T 表示数据组数.
接下来T 组数据,对于每一组数据:
第一行两个整数n,m
接下来m 行,每行两个数字,表示一条藤蔓的两个端点
【输出格式】
一行一个数字,表示使用飞爪的最少次数
【样例输入1】
1
3 1
1 2
【样例输出1】
2
【样例输入2】
1
3 1
0 1
【样例输出2】
1
【数据范围】
第1 个测试点,m=1
第2 个测试点,n<=5,m<=5
第3 个测试点,n<=7,m<=7
第4,6 个测试点,从地面出发至少有一条藤蔓
第5,7 个测试点,从地面出发没有藤蔓
第6,7,8 个测试点,所有的藤蔓都是连通的.也就是说,如果x 和y 两个地点都连接了至
少一条藤蔓,就存在一条路径沿着藤蔓从x 爬到y.
对每个测试点,T 组数据的n 之和<=105,T 组数据的m 之和<=5*105
注意T 可能很大,请注意避免因为初始化的用时过多而超时.
蒲公英(dandelion)
【题目描述】
“人生迫不得已的事情太多,何不只记住那些美好的片段,比如,那片山坡上的蒲公英”
许宣喜欢观赏蒲公英.山坡上有n 株蒲公英.通过目测,许宣给每个蒲公英都估计了一
个正整数作为美学价值.每天,许宣都会走上山坡,依次观赏一些蒲公英.许宣对同一株蒲
公英在每一天估计的美学价值都是一样的.
第X 天观赏蒲公英的时候,许宣要求自己按顺序观赏的下一株蒲公英至少比前一株
的美学价值多X,而第一株蒲公英没有要求.例如,第一天的时候,这个要求相当于观赏的蒲
公英美学价值严格递增.
现在,小白得到了许宣在T 天中观赏的记录.但是她发现,这个记录或许会有差错.具体
来说,如果这T 天的记录都是真的,而许宣又一直保持”第X 天,每株美学价值至少比前一
株多X”的规则,就不存在一种美学价值的赋值方式,使得每天的美学价值估计都一样.
小白又觉得,只考虑前Q 天的观赏记录,还是能够给蒲公英合理的美学价值.
现在小白想知道Q 最大是多少.也就是说,最多考虑前多少天的观赏记录时能够不产
生矛盾?如果第一天就产生矛盾,答案为0.如果到最后一天也没产生差错,答案为Q
【输入格式】
第一行两个整数n,T,分别表示蒲公英的数目和许宣游览的天数.
接下来T 行,第x 行表示许仙第x 天的观赏记录,第一个数字是cnt[x],表示第x 天观赏
的蒲公英数目,接下来x 个数字(1 到n 之间,且不会重复),表示许仙这一天的观赏路线.
【输出格式】
一行一个整数Q,表示不产生矛盾的最大天数
【样例输入】
5 3
4 1 5 4 2
1 5
3 5 2 4
【样例输出】
2
【数据范围】
第1,2,3 个测试点,n<=10,T<=20,cnt[x]之和不超过100
第4,5,6 个测试点,n<=200,T<=200,cnt[x]之和不超过1200
第7,8,9,10 个测试点,n<=105,T<=2*105,cnt[x]之和<=5*105
白蛇相簿(white)
【题目描述】
“又到了,白色相簿的季节呢”
白蛇:缘起 是一部非常优秀的国产动画电影,现在liu_runda 想要将电影中的精彩画
面制成一部<白蛇相簿>.
现在liu_runda 手里已经有了n 张精彩相片,存储在电脑上.每张相片都有两个属性,一
个是文件大小,我们假设相片的大小都是整数.另一个属性是精彩程度,也是一个正整数.
liu_runda 希望在最终的白蛇相簿中,平均每个kb 的精彩程度尽量大.也就是说,每张
相片的文件大小加起来得到一个数字sumDaXiao,每张相片的精彩程度加起来得到一个
数字sumJingCai, liu_runda 希望sumJingCai/sumDaXiao 的比值尽量大.
当然,liu_runda 希望白蛇相簿的相片张数不要太多,也不要太少,恰好在L 张到R 张之
间.
同时,liu_runda 还想知道,选择L 张到R 张相片取得最大比值的相片的方案数是多少.
保证这个方案数可以用int 表示.
【输入格式】
第一行3 个整数n,L,R 表示已有的相片张数和相簿中希望选取的相片数的范围.
接下来n 行,第i 行两个数字,依次表示第i 张相片的文件大小w[i]和精彩程度v[i]
【输出格式】
第一行一个四舍五入保留小数点后三位的浮点数,表示最大比值.
第二行一个正整数,表示取到最大比值的方案数.(某个方案取到最大比值,是指这个
方案的比值精确值等于最大比值的精确值,而不是四舍五入后相等.两个方案不同,当且仅
当存在一张相片在一个方案中被选择却在另一个方案中未被选择)
【样例输入】
7 3 5
1 2
4 3
10 1
6 9
3 3
1 5
9 8
【样例输出】
2.000
2
【数据范围】
第1 个测试点,n=3
第2 个测试点,n=5
第3 个测试点,n=15,
第4,5 个测试点,n<=100, 所有的物品的w[i]/v[i]都相同,且L=R
第6,7 个测试点,方案数为1
对所有测试点,n<=105,1<=w[i]<=10,1<=v[i]<=10
保证使用double 编写正确的程序不会遇到精度问题.

CDQZ Day1的更多相关文章

  1. CDQZ集训DAY1 日记

    爆炸的一天…… 上午考试,然而一道题都没想出正解. T1刚看到题就想到数位DP,然后有感觉是反演,然后读完题之后又觉得是数位DP,发现最后只关注最后9位打了一个类似数位DP的爆搜.期望20分,实际10 ...

  2. CDQZ多校集训记

    20171218 DAY0 初相逢 今天的阳光很好,确实好极了.下午开始时,mercer说门外站了一堆人,我看都不用看就知道是衡水的.衡水人,怎么说呢,觉得还是挺不一样的.不知道像凡哥和超哥这种奇异的 ...

  3. 记一周cdqz训练

    #include <cstdio> using namespace std; int main(){ puts("转载请注明出处:http://www.cnblogs.com/w ...

  4. NOIp2016 Day1&Day2 解题报告

    Day1 T1 toy 本题考查你会不会编程. //toy //by Cydiater //2016.11.19 #include <iostream> #include <cstd ...

  5. day1

    day1.py ][][: ][: ): : ]['lock'] = 0 json.dump(userlist_message, open(userlist, 'w')) break #输错次数到3次 ...

  6. day1作业--登录入口

    作业概述: 编写一个登录入口,实现如下功能: (1)输入用户名和密码 (2)认证成功后显示欢迎信息 (3)输错三次后锁定 流程图: readme: 1.程序配置文件: 黑名单文件blacklist.t ...

  7. luogu1003铺地毯[noip2011 提高组 Day1 T1]

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

  8. Python学习路程day1

    变量起名: 变量名如果太长,推荐使用下划线来分开,让人看得清晰明白.例:nums_of_alex_girl=19 .或者是驼峰写法,即首字母大写.例:NumOfAlexGf=18 注意:不合法的变量起 ...

  9. 团队项目——站立会议 DAY1

    团队项目--站立会议 DAY1        团队成员介绍(5人):张靖颜.何玥.钟灵毓秀.赵莹.王梓萱        今日(2016/5/6)为站立会议的第一天,一起对团队项目进行讨论,并对每个人的 ...

随机推荐

  1. springMVC+spring+mybatis整合(包括文件上传和下载)

    driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncod ...

  2. mysql sandbox的问题备忘

    工具很好用,但是安装运行时有些小问题: 1.启动数据库时提示--bootstrap已禁用:那是mysql5.7以后废弃了此参数,改用--initialize来初始化了,而一般公共仓库里的sandbox ...

  3. pandas map, apply, applymap区别

    map只对一个序列而言的. apply只是整个dataframe上任意一列或多列,或者一行或多行, 即可在任意轴操作. 在一列使用apply时,跟map效果一样. 多列时只能用apply. apply ...

  4. PHP中static与self

    一直搞不清楚,今天百度自己也测试了一下. <?php class A { public static function closure(){ echo __CLASS__."<b ...

  5. Part10-C语言环境初始化-Bss段初始化lesson2

    1.BSS段的作用 初始化的全局变量存放在数据段: 局部变量存放在栈中: malloc的存放在堆: 未初始化的全局变量存放在BSS段: 找到bss段的起始与结束地址,往里面添加0,便初始化好了. 打开 ...

  6. Entity Framework Tutorial Basics(40):Validate Entity

    Validate Entity You can write custom server side validation for any entity. To accomplish this, over ...

  7. jQuery对象与DOM对象及互相转化

    <p id=‘’hello”></p> 普通处理,通过标准JavaScript处理: var p = document.getElementById('hello'); p.i ...

  8. C# 随机数 Radom 循环生成同一的数字

    错误:在一个循环结构中,利用下列代码生成随机数,发生生成的随机数是一样的! for (int i = 0; i < myArray.Length; i++) //给数组赋值 { Random m ...

  9. HttpAnalyzerStdV7安装教程

    相关链接:HttpAnalyzerStdV7使用教程 安装步骤:   1.解压压缩包   2.双击运行安装文件   3.根据向导提示点击Next   4.选择接受协议,点击Next   5.修改安装路 ...

  10. MongoDB整理笔记の指定命令和指定文件

    MongoDB shell 不仅仅是一个交互式的shell,它也支持执行指定javascript 文件,也支持执行指定的命令片断.有了这个特性,就可以将MongoDB 与linux shell 完美结 ...