国庆 Day1
This is a 玄学 exam
A.年轮蛋糕
最小的最大,二分首选
断环为链,check(x),x为答案,然后将每个大于x的子区间记录下来
如果有大于3个的话,那么x就可以是答案
那么·,在优化下来,二分里套个下二分,查长度右端点
时间复杂度:O(log(10^13)^3*n)
但是AC了
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
inline int read()
{
int f=,ans=;char c;
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){ans=ans*+c-'';c=getchar();}
return f*ans;
}
long long n,a[],s[],l,r,mid,maxn,inf=<<-;
long long cx(long long ll,long long rr,long long sc)
{
long long da=inf;
long long ls=ll,rs=rr,mid;
while(ls<=rs)
{
mid=(ls+rs)/;
if(s[mid]>=sc) da=min(da,mid),rs=mid-;
else ls=mid+;
}
return da;
}
bool check(long long xx)
{
for(long long i=;i<=n;i++)
{
long long qv=s[i-],ll=i,rr=i+n-,res=;
while(ll<=rr)
{
if(res==)
{
if(s[rr]-qv>=xx) return ;
else break;
}
long long as=cx(ll,rr,qv+xx);
if(as==inf)
{
if(res>=) return ;
else break;
}
qv=s[as];
ll=as+;
res++;
if(res==)
{
if(s[rr]-qv>=xx) return ;
else break;
}
if(res>=) return ;
}
}
return ;
}
int main()
{
n=read();
for(long long i=;i<=n;i++) a[i]=read(),a[i+n]=a[i],r+=a[i];
for(long long i=;i<=*n;i++) s[i]=s[i-]+a[i];
while(l<=r)
{
mid=(l+r)/;
if(check(mid)) maxn=max(maxn,mid),l=mid+;
else r=mid-;
}
printf("%lld",maxn);
}
B.最佳团体
玄学题目
复杂度未知,假装是A了吧
一看到一个和/一个和,分数规划的经典题
又想到若x可以作为答案的话,x之前也可以作为答案
所以可以二分
然后这个问题可以转化成在树上做背包即可
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
inline int read()
{
int f=,ans=;char c;
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){ans=ans*+c-'';c=getchar();}
return f*ans;
}
double eps=1e-;
struct node{
int u,v,nex;
}x[];
int cnt,n,head[],s[],t[];
double val[],dp[][];
double l,r,mid,maxn;
void add(int u,int v)
{
x[cnt].u=u,x[cnt].v=v,x[cnt].nex=head[u],head[u]=cnt++;
}
int m,size[],deep[];
void dfs(int f,int fath)
{
deep[f]=deep[fath]+;
size[f]=;
for(int i=head[f];i!=-;i=x[i].nex)
{
dfs(x[i].v,f);
size[f]+=size[x[i].v];
}
}
void dp_tree(int xx)
{
dp[xx][]=;int k=min(m,size[xx]);
for(int i=head[xx];i!=-;i=x[i].nex)
{
int v=x[i].v;
dp_tree(v);
for(int t=k;t>=;t--)
for(int j=min(t,size[v]);j>=;j--) dp[xx][t]=max(dp[xx][t],dp[xx][t-j]+dp[v][j]);
}
if(xx!=)
for(int t=k;t>=;t--) dp[xx][t]=dp[xx][t-]+val[xx];
}
bool check(double xx)
{
bool flag=false;
memset(dp,0xcf,sizeof(dp));
for(int i=;i<=n;i++)
val[i]=double(s[i]-xx*t[i]);
dp_tree();
return dp[][m]>=;
}
int main()
{
memset(head,-,sizeof(head));
m=read(),n=read();
for(int i=;i<=n;i++)
{
t[i]=read(),s[i]=read();
r+=double(s[i]);
int v=read();
add(v,i);
}
dfs(,);
l=,r*=;
while(l<=r)
{
double mid=(l+r)/;
if(check(mid)) l=mid+eps,maxn=max(maxn,mid);
else r=mid-eps;
}
printf("%.3lf",maxn);
}
C.起床困难综合症
一道思维题,二进制运算至于位有关,并没有与整体有关
所以就可以打一个表,0000000,1111111,位数都为30为(int的精度),然后与输入数据处理一下
看一下0可以转换成什么,1可以转换成什么
然后瞎搞一下即可
#include<iostream>
#include<cstdio>
#include<cstring>
#include<climits>
#include<algorithm>
using namespace std;
inline int read()
{
int f=,ans=;char c;
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){ans=ans*+c-'';c=getchar();}
return f*ans;
}
int n,m,l,r=INT_MAX,data,sry;
char str[];
int main()
{
n=read(),m=read();
for(int i=;i<=n;i++)
{
scanf("%s",str+);
if(str[]=='A') {int s=read();l&=s,r&=s;}
else if(str[]=='O') {int s=read();l|=s,r|=s;}
else
{int s=read();l^=s,r^=s;}
}
for(int i=;i>=;i--)
{
if(l&(<<i)) data|=(<<i);
else if(sry+(<<i)<=m)
if(r&(<<i)) data|=(<<i),sry+=(<<i);
}
cout<<data;
}
/*
3 10
AND 5
OR 6
XOR 7
*/
国庆 Day1的更多相关文章
- 正睿OI国庆day1
正睿OI国庆day1 T1 \[ S_n=1*S_{n-1}+1*F_{n-1}+1*F_{n-2}+1*f_{n-1}+1*f_{n-2} \] \[ F_{n}=0*S_{n-1}+1*F_{n- ...
- 清北国庆day1 (脑)残
(留坑) /* 不知道为什要找的循环节TM这么长 */ #include<cstdio> #include<cstdlib> #include<cstring> u ...
- 学大伟业 2017 国庆 Day1
期望得分:100+100+20=220 实际得分:100+100+20=220 (好久没有期望==实际了 ,~\(≧▽≦)/~) 对于 a........a 如果 第1个a 后面出现的第1个b~z 是 ...
- 国庆集训 Day1 T2 生成图 DP
国庆集训 Day1 T2 生成图 现在要生成一张\(n\)个点的有向图.要求满足: 1.若有 a->b的边,则有 b->a 的边 2.若有 a->b 的边和 b->c 的边,则 ...
- 牛客2018国庆集训 DAY1 D Love Live!(01字典树+启发式合并)
牛客2018国庆集训 DAY1 D Love Live!(01字典树+启发式合并) 题意:给你一颗树,要求找出简单路径上最大权值为1~n每个边权对应的最大异或和 题解: 根据异或的性质我们可以得到 \ ...
- 湖南国庆模拟赛day1 分组
题目大意:给你一个n个数的数列s,要对这些数进行分组,当有任意两个数在一种方案在一起而在另一种方案中不在一起算是两种不同的方案,一个组的"不和谐程度"为组内数的极差,如果只有一个人 ...
- 2017北京国庆刷题Day1 afternoon
期望得分:100+100+100=300 实际得分:100+100+100=300 T1 一道图论好题(graph) Time Limit:1000ms Memory Limit:128MB 题目 ...
- 牛客国庆训练,CCPC Camp DAY1 J 倍增,括号匹配
https://www.nowcoder.com/acm/contest/201#question 题意:中文不翻译了 解法的个人理解: 对于一个合法的区间$[L,R]$ 1.显然其左括号的匹配位置都 ...
- 牛客国庆集训派对Day1.B.Attack on Titan(思路 最短路Dijkstra)
题目链接 \(Description\) 给定\(n,m,C\)及大小为\((n+1)(m+1)\)的矩阵\(c[i][j]\).平面上有\((n+1)(m+1)\)个点,从\((0,0)\)编号到\ ...
随机推荐
- C 进制 类型说明符 位运算 char类型
一 进制 1. 什么是进制 是一种计数的方式 数值的表示形式 2. 二进制 1> 特点: 只有0和1 逢2进1 2> 书写格式: 0b或者0B开头 3> %d 以带符号的十进制形式输 ...
- Click Once使用总结
做了一个CS结构软件,有十几个用户使用的客户端,因为刚开始试用期间,要不断根据用户使用情况修正问题和添加新功能,所以频繁更新是不可避免的,暂时没有深入去研究软件更新,暂时采取的方式是用户通过FTP自行 ...
- HTML/JSP中一些单书名号标签的用途<%-- --%><!-- --><%@ %><%! %><% %><%= %>
注释 <%-- --%>是(JSP)隐式注释,不会在页面显示的注释 <!-- -->是(Html)显示注释,会在JSP页面显示 关于注释还有单行隐式注释//和多行隐式注释/* ...
- java学习笔记-9.违例差错控制
1.违例规范是告诉程序员这个方法可能抛出哪些类型的异常.他的格式在方法声明中,位于自变量(参数)列表的后面,如void f() throws tooBig, tooSmall, divZero { ...
- Bootstrap框架(组件)
按钮组 通过按钮组容器把一组按钮放在同一行里.通过与按钮插件联合使用,可以设置为单选框或多选框的样式和行为. 按钮组中的工具提示和弹出框需要特别的设置 当为 .btn-group 中的元素应用工具提示 ...
- php多进程单例模式下的 MySQL及Redis连接错误修复
前几天写了个php常驻脚本,主要逻辑如下 //跑完数据后休息60秒 $sleepTime = 60; $maxWorker = 10; while (true) { $htmlModel = new ...
- 网络安全部门的漏洞扫描让你头痛不已么——PHP环境选它就可以了
最近网络安全要求是越来越严,原来PHP编写的程序在XAMPP或者其他环境下总会被某款软件扫出漏洞,进而上级部门就停止了我们服务器的外网出口,然而自从发现了一款安全环境神器UPUPW后,这样的问题就再也 ...
- 150命令之线上查询及帮助命令 man hellp
150命令之线上查询及帮助命令 man 查询命令的帮助 man + 命令 NAME ls - list directory contents 命令+命令简单说明 SYNOPSIS ...
- nodejs笔记--基础篇(一)
Sublime Node.js开发环境配置 下载并安装Node.js安装包后再开始配置 1.先安装好Sublime Text 2 2.运行Sublime,菜单上找到Tools ---> Buil ...
- 导弹拦截与Dilworth定理
这两天被Dilworth.链和反链搞到头昏脑胀,终于有点眉目,现在来总结一下. Dilworth定理说的是:对于一个偏序集,其最少链划分数等于其最长反链的长度. Dilworth定理的对偶定理说的是: ...