CDQZ Day1
#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的更多相关文章
- CDQZ集训DAY1 日记
爆炸的一天…… 上午考试,然而一道题都没想出正解. T1刚看到题就想到数位DP,然后有感觉是反演,然后读完题之后又觉得是数位DP,发现最后只关注最后9位打了一个类似数位DP的爆搜.期望20分,实际10 ...
- CDQZ多校集训记
20171218 DAY0 初相逢 今天的阳光很好,确实好极了.下午开始时,mercer说门外站了一堆人,我看都不用看就知道是衡水的.衡水人,怎么说呢,觉得还是挺不一样的.不知道像凡哥和超哥这种奇异的 ...
- 记一周cdqz训练
#include <cstdio> using namespace std; int main(){ puts("转载请注明出处:http://www.cnblogs.com/w ...
- NOIp2016 Day1&Day2 解题报告
Day1 T1 toy 本题考查你会不会编程. //toy //by Cydiater //2016.11.19 #include <iostream> #include <cstd ...
- day1
day1.py ][][: ][: ): : ]['lock'] = 0 json.dump(userlist_message, open(userlist, 'w')) break #输错次数到3次 ...
- day1作业--登录入口
作业概述: 编写一个登录入口,实现如下功能: (1)输入用户名和密码 (2)认证成功后显示欢迎信息 (3)输错三次后锁定 流程图: readme: 1.程序配置文件: 黑名单文件blacklist.t ...
- luogu1003铺地毯[noip2011 提高组 Day1 T1]
题目描述 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯.一共有 n 张地毯,编号从 1 到n .现在将这些地毯按照编号从小到大的顺序平行于 ...
- Python学习路程day1
变量起名: 变量名如果太长,推荐使用下划线来分开,让人看得清晰明白.例:nums_of_alex_girl=19 .或者是驼峰写法,即首字母大写.例:NumOfAlexGf=18 注意:不合法的变量起 ...
- 团队项目——站立会议 DAY1
团队项目--站立会议 DAY1 团队成员介绍(5人):张靖颜.何玥.钟灵毓秀.赵莹.王梓萱 今日(2016/5/6)为站立会议的第一天,一起对团队项目进行讨论,并对每个人的 ...
随机推荐
- Codeforces 1120D (树形DP 或 最小生成树)
题意看这篇博客:https://blog.csdn.net/dreaming__ldx/article/details/88418543 思路看这篇:https://blog.csdn.net/cor ...
- 使用RandomAccessFile读写数据
------------siwuxie095 工程名:TestRandomAccessFile 包名:com.siwuxie095.file 类名:MultiWriteFile.java(主类).Wr ...
- 扩展卡尔曼滤波EKF与多传感器融合
参考:https://blog.csdn.net/young_gy/article/details/78468153 Extended Kalman Filter(扩展卡尔曼滤波)是卡尔曼滤波的非线性 ...
- unity5.6里Baked Lighting下面几个Lighting Mode的解释
这个似乎是新增的功能,目前在官方文档里还没有解释,但有一个链接指向『草案』, 可是链接在被墙的google doc上,为了方便阅读和备忘,全部贴过来整在一起: 因为原文太长,把总结写在前面吧: 1.四 ...
- 34.UCASE() LCASE() 函数
UCASE() 函数 UCASE 函数把字段的值转换为大写. SQL UCASE() 语法 SELECT UCASE(column_name) FROM table_name SQL UCASE() ...
- SQL 左联接去除左边重复的数据
代码如下: use DB go select table1.*,b.OPTime from [dbo].[table1] left join( select * from (select table2 ...
- bootstrap图片切换效果
<!DOCTYPE html><html lang="zh-cn"><head><meta charset="utf-8&quo ...
- 用maven将项目安装到本地仓库,为什么老是在默认仓库地址(C:\Users\userName\.m2\repository)
使用mvn clean install安装项目到本地的时候,在idea中配置好了本地仓库地址,见下图: 但是安装时,还是安装到了C:\Users\userName\.m2\repository路径下, ...
- 编写高质量代码改善C#程序的157个建议——建议54:为无用字段标注不可序列化
建议54:为无用字段标注不可序列化 序列化是指这样一种技术:把对象转变成流.相反过程,我们称为反序列化.在很多场合都需要用到这项技术. 把对象保存到本地,在下次运行程序的时候,恢复这个对象. 把对象传 ...
- PrintDocument or PrintPreviewDialog 打印
/// <summary> /// /// </summary> /// <param name="sender"></param> ...