6.22 NOI 模拟
\(T1\)递归
给出 \(Thue-Morse\) 序列的定义三
每次 \(0\rightarrow 01\),\(1\rightarrow 10\)
\(0\rightarrow 01 \rightarrow 0110 \rightarrow 01101001\rightarrow...\)
我们现在已知串 \(010010\) 考虑将其划分
\(0\ 10\ 01\ 0\) 或者 \(01\ 00 \ 10\)
显然第二个是不合法的。
我们把第一个补全,为 \(10\ 10\ 01\ 01\)
然后合并一下为 \(1100\) ,我们假设 \(1100\) 出现的位置是 \(i\) 我们 \(010010\) 出现的位置为 \(2i+1\)
然后我们得到递推式 \(f(l,r)=f(\lfloor l/2\rfloor,\lfloor r/2\rfloor)+(l\mod 2)\)
我们只需要暴力求小数据即可
#include<bits/stdc++.h>
using namespace std;
int f[3][8]={{0,1},{5,2,0,1},{0,4,3,1,5,2}};
long long slo(long long l,long long r)
{
if(r-l+1>=4) return 2*slo(l/2,r/2)+(l&1);
long long S=0;
for(long long i=l;i<=r;i++)
{
S|=(__builtin_popcountll(i)&1)<<(i-l);
}
return f[r-l][S];
}
int main()
{
int q;
scanf("%d",&q);
while(q--)
{
long long l,r;
scanf("%lld%lld",&l,&r);
cout<<slo(l,r)<<"\n";
}
}
$T2\ $加边
按照原图跑以 \(1\) 为根的 \(bfs\) 树
\(b>2\times a\)答案是 \(dep\times a\)
否则对于 \(b\) 边进行 \(bfs\) ,类似三元环进行删边,复杂度可以保证在 \(O(m\sqrt m)\)
#define Eternal_Battle ZXK
#include<bits/stdc++.h>
#define int long long
#define MAXN 200005
using namespace std;
#define FastIO
#ifdef FastIO
char buf[1<<21],*p1,*p2;
#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
#endif
template<class T>
T Read()
{
T x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9')
{
if(ch=='-')
f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9')
{
x=(x<<1)+(x<<3)+(ch^'0');
ch=getchar();
}
return x*f;
}
int (*read)()=Read<int>;
#define read Read<int>
vector<int>rd[MAXN],gd[MAXN];
int dis[MAXN],dep[MAXN],n,m,a,b;
void add(int u,int v)
{
rd[u].push_back(v);
gd[u].push_back(v);
}
void bfs()
{
queue<int>q;
memset(dep,-1,sizeof(dep));
q.push(1);
dep[1]=0;
while(q.size())
{
int now=q.front();
q.pop();
for(int i=0;i<rd[now].size();i++)
{
int y=rd[now][i];
if(dep[y]!=-1) continue;
q.push(y); dep[y]=dep[now]+1;
}
}
}
bitset<MAXN>Min;
void bfs_dis()
{
queue<int>q;
memset(dis,-1,sizeof(dis));
q.push(1);
dis[1]=0;
while(q.size())
{
int now=q.front();
q.pop();
// Min.reset();
for(vector<int>::iterator it=rd[now].begin();it!=rd[now].end();)
{
int y=*it;
Min[y]=1;
it++;
}
for(vector<int>::iterator it=rd[now].begin();it!=rd[now].end();)
{
int y=*it;
if(dis[y]!=-1) it=rd[now].erase(it);
else it++;
for(vector<int>::iterator it1=gd[y].begin();it1!=gd[y].end();)
{
int ty=*it1;
if(dis[ty]!=-1)
{
it1=gd[y].erase(it1);
}
else
{
it1++;
if(Min[ty]) continue;
dis[ty]=dis[now]+b;
q.push(ty);
}
}
}
for(int i=0;i<rd[now].size();i++)
{
int y=rd[now][i];
Min[y]=0;
}
}
}
signed main()
{
scanf("%lld%lld%lld%lld",&n,&m,&a,&b);
for(int i=1,u,v;i<=m;i++)
{
u=read();v=read();
add(u,v); add(v,u);
}
bfs();
if(b>=2*a)
{
for(int i=2;i<=n;i++)
{
cout<<dep[i]*a<<"\n";
}
}
else
{
bfs_dis();
for(int i=2;i<=n;i++)
{
if(dep[i]%2==0)
{
cout<<(dep[i]/2)*b<<"\n";
}
else
{
if(dis[i]==-1) cout<<dep[i]/2*b+a<<"\n";
else cout<<min(dep[i]/2*b+a,dis[i])<<"\n";
}
}
}
}
$T3\ $虐场
考虑枚举 \(k\),考虑已知 \(k\) 之后应该怎么求解
设 \(c_i=b_{j+1}-b_{j}-k\)表示空场的和
我们先选定连续 \(n\) 场,向左右移动,可以导致 \(b\) 整体加减 \(1\),\(c\) 不变
首先最大化收益,先考虑选最右侧 \(n\times k\) 场,然后往左移动
设 \(d_i=b_i-a_i\) 我们要 $d_i\leq 0 $,并且 \(\sum |b_i|\) 尽可能小
每次贪心的话,就把目前后缀最大值位置向左平移,最后每个位置移动的位置是后缀的最大值
设后缀最大值 \(suf_i\),答案是 \(\sum (suf_i-b_i)\)
至于移动限制考虑我们只能进行 \(m-k\times n\) 次前缀减,后面的只能进行整体减就好了
发现答案是关于 \(k\) 的凸函数,可以三分找极值点
#define Eternal_Battle ZXK
#include<bits/stdc++.h>
#define int long long
#define MAXN 200010
using namespace std;
int n,m,k,lim,a[MAXN],b[MAXN];
int check(int x)
{
long long nw=0;
for(int i=1;i<=n;i++)
{
b[i]=m*x-x*(x+1)/2*n+i*x-a[i];
nw=max(nw,b[i]);
}
long long an=0,sum=max(nw-m+x*n,0ll);
for(int i=n;i>=1;i--)
{
sum=max(sum,b[i]);
an+=sum-b[i];
}
return an;
}
signed main()
{
scanf("%lld%lld",&n,&m);
k=lim=m/n;
for(int i=1;i<=n;i++)
{
scanf("%lld",&a[i]);
int l=1,r=m/n;
while(l<=r)
{
long long mid=(l+r)>>1;
if(mid*(mid-1)/2*n+i*mid<=a[i]) l=mid+1;
else r=mid-1;
}
lim=min(lim,r);
l=1,r=lim;
while(l<=r)
{
long long mid=(l+r)>>1;
if(m*mid-mid*(mid+1)/2*n+i*mid-a[i]-m+mid*n<=0) l=mid+1;
else r=mid-1;
}
k=min(l,k);
}
int ans=check(min(lim,k));
int l=0,r=k-1;
while(r-l>10)
{
int mid=(l+r)>>1;
long long an1=check(mid),an2=check(mid+1);
if(an1<an2) r=mid-1;
else l=mid+2;
}
for(int i=l;i<=r;i++)
{
ans=min(ans,check(i));
}
ans=-ans;
for(int i=1;i<=n;i++)
{
ans+=a[i];
}
cout<<ans<<endl;
}
6.22 NOI 模拟的更多相关文章
- 8.22 NOIP 模拟题
8.22 NOIP 模拟题 编译命令 g++ -o * *.cpp gcc -o * *.c fpc *.pas 编译器版本 g++/gcc fpc 评测环境 位 Linux, .3GHZ CPU ...
- 5.30 NOI 模拟
$5.30\ NOI $模拟 高三大哥最后一次模拟考了,祝他们好运 \(T1\)装箱游戏 显然可以将四种字母之间的空缺当做状态枚举 那么这道题就很显然了 #include<bits/stdc++ ...
- 5.23 NOI 模拟
$5.23\ NOI $模拟 \(T1\)简单的计算几何题 \(zjr:\)我当时没改,那么自己看题解吧 倒是有个简单的随机化方法(能获得\(72pts,\)正确性未知)\(:\) 随机两条切椭圆的平 ...
- 5.6 NOI模拟
\(5.6\ NOI\)模拟 明天就母亲节了,给家里打了个电话(\(lj\ hsez\)断我电话的电,在宿舍打不了,只能用教练手机打了) 其实我不是很能看到自己的\(future,\)甚至看不到高三的 ...
- 5.4 NOI模拟
\(5.4\ NOI\)模拟 \(T1\) 想到分讨,但是暴力输出一下方案之后有很多特别的情况要讨论,就弃了... 假设\(a\)是原序列,\(b\)是我们得到的序列 设\(i\)是最长公共前缀,\( ...
- 9.22 NOIP模拟题
吉林省信息学奥赛 2017 冬令营 ...
- NOI模拟赛 Day1
[考完试不想说话系列] 他们都会做呢QAQ 我毛线也不会呢QAQ 悲伤ING 考试问题: 1.感觉不是很清醒,有点困╯﹏╰ 2.为啥总不按照计划来!!! 3.脑洞在哪里 4.把模拟赛当作真正的比赛,紧 ...
- 2018.9.22 NOIP模拟赛
*注意:这套题目应版权方要求,不得公示题面. 从这里开始 Problem A 妹子 Problem B 旅程 Problem C 老大 因为业务水平下滑太严重,去和高一考NOIP模拟,sad... P ...
- 2018.08.22 NOIP模拟 string(模拟)
string [描述] 给定两个字符串 s,t,其中 s 只包含小写字母以及*,t 只包含小写字母. 你可以进行任意多次操作,每次选择 s 中的一个*,将它修改为任意多个(可以是 0 个)它的前一个字 ...
随机推荐
- 126_Power BI中使用DAX计算股票RSI及股票均线相关
博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 一.背景 前些日子,有朋友在交流股票RSI用DAX处理的问题,由于RSI股票软件的算法几乎都是需要用到股票从上市第一天开始 ...
- 《HelloGitHub》第 74 期
兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 HelloGitHub 分享 GitHub 上有趣.入门级的开源项目. https://github.com/521xueweiha ...
- 腾讯QQ快捷登陆
腾讯QQ快捷 相关各语言对接qq快捷登录教程 [C#]QQ开放平台(QQ站外登录)_流程和源码示例 j2ee中实现QQ第三方登陆 web实现QQ第三方登录 asp.net网站接入QQ登录 php实现q ...
- 【Java面试】介绍下Spring IoC的工作流程
Hi,我是Mic 一个工作了4年的粉丝,在面试的时候遇到一个这样的问题. "介绍一下Spring IOC的工作流程" 他说回答得不是很好,希望我能帮他梳理一下. 关于这个问题,我们 ...
- Vue回炉重造之封装一个实用的人脸识别组件
前言 人脸识别技术现在越来越火,那么我们今天教大家实现一个人脸识别组件. 资源 element UI Vue.js tracking-min.js face-min.js 源码 由于我们的电脑有的有摄 ...
- SAP 动态选择屏幕实例
DATA:BEGIN OF gs_sel, werks TYPE marc-werks, "工厂 matnr TYPE mara-matnr, "物料 mtart TYPE mar ...
- 你真的懂Python命名吗?
转载请注明出处️ 作者:测试蔡坨坨 原文链接:caituotuo.top/7417a7f0.html 大家好,我是测试蔡坨坨. 今天,我们来聊一下Python命名那些事儿. 名为万物之始,万物始于无名 ...
- 关于我用python表白成功这件事【表白成功】
520,并非情人所属, 我们可以表白万物, 不管什么时候, 这都是一个特别的日子, 今天,我要表白所有, 心里有我的人! 在这个充满幸福的日子里, 我要把最美好的祝福, 送给心里有我的每一个人: 祝愿 ...
- 8. SparkSQL综合作业
综合练习:学生课程分数 网盘下载sc.txt文件,分别创建RDD.DataFrame和临时表/视图: 分别用RDD操作.DataFrame操作和spark.sql执行SQL语句实现以下数据分析: 总共 ...
- 笔记本USB接口案例分析和是实现
笔记本电脑 笔记本电脑(laptop)通常具备使用USB设备的功能.在生产时,笔记本都预留了可以插入USB设备的USB接口,但具体是什么USB设备,笔记本厂商并不关心,只要符合USB规格的设备都可以 ...