\(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 模拟的更多相关文章

  1. 8.22 NOIP 模拟题

      8.22 NOIP 模拟题 编译命令 g++ -o * *.cpp gcc -o * *.c fpc *.pas 编译器版本 g++/gcc fpc 评测环境 位 Linux, .3GHZ CPU ...

  2. 5.30 NOI 模拟

    $5.30\ NOI $模拟 高三大哥最后一次模拟考了,祝他们好运 \(T1\)装箱游戏 显然可以将四种字母之间的空缺当做状态枚举 那么这道题就很显然了 #include<bits/stdc++ ...

  3. 5.23 NOI 模拟

    $5.23\ NOI $模拟 \(T1\)简单的计算几何题 \(zjr:\)我当时没改,那么自己看题解吧 倒是有个简单的随机化方法(能获得\(72pts,\)正确性未知)\(:\) 随机两条切椭圆的平 ...

  4. 5.6 NOI模拟

    \(5.6\ NOI\)模拟 明天就母亲节了,给家里打了个电话(\(lj\ hsez\)断我电话的电,在宿舍打不了,只能用教练手机打了) 其实我不是很能看到自己的\(future,\)甚至看不到高三的 ...

  5. 5.4 NOI模拟

    \(5.4\ NOI\)模拟 \(T1\) 想到分讨,但是暴力输出一下方案之后有很多特别的情况要讨论,就弃了... 假设\(a\)是原序列,\(b\)是我们得到的序列 设\(i\)是最长公共前缀,\( ...

  6. 9.22 NOIP模拟题

    吉林省信息学奥赛 2017 冬令营                                                                                    ...

  7. NOI模拟赛 Day1

    [考完试不想说话系列] 他们都会做呢QAQ 我毛线也不会呢QAQ 悲伤ING 考试问题: 1.感觉不是很清醒,有点困╯﹏╰ 2.为啥总不按照计划来!!! 3.脑洞在哪里 4.把模拟赛当作真正的比赛,紧 ...

  8. 2018.9.22 NOIP模拟赛

    *注意:这套题目应版权方要求,不得公示题面. 从这里开始 Problem A 妹子 Problem B 旅程 Problem C 老大 因为业务水平下滑太严重,去和高一考NOIP模拟,sad... P ...

  9. 2018.08.22 NOIP模拟 string(模拟)

    string [描述] 给定两个字符串 s,t,其中 s 只包含小写字母以及*,t 只包含小写字母. 你可以进行任意多次操作,每次选择 s 中的一个*,将它修改为任意多个(可以是 0 个)它的前一个字 ...

随机推荐

  1. 126_Power BI中使用DAX计算股票RSI及股票均线相关

    博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 一.背景 前些日子,有朋友在交流股票RSI用DAX处理的问题,由于RSI股票软件的算法几乎都是需要用到股票从上市第一天开始 ...

  2. 《HelloGitHub》第 74 期

    兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 HelloGitHub 分享 GitHub 上有趣.入门级的开源项目. https://github.com/521xueweiha ...

  3. 腾讯QQ快捷登陆

    腾讯QQ快捷 相关各语言对接qq快捷登录教程 [C#]QQ开放平台(QQ站外登录)_流程和源码示例 j2ee中实现QQ第三方登陆 web实现QQ第三方登录 asp.net网站接入QQ登录 php实现q ...

  4. 【Java面试】介绍下Spring IoC的工作流程

    Hi,我是Mic 一个工作了4年的粉丝,在面试的时候遇到一个这样的问题. "介绍一下Spring IOC的工作流程" 他说回答得不是很好,希望我能帮他梳理一下. 关于这个问题,我们 ...

  5. Vue回炉重造之封装一个实用的人脸识别组件

    前言 人脸识别技术现在越来越火,那么我们今天教大家实现一个人脸识别组件. 资源 element UI Vue.js tracking-min.js face-min.js 源码 由于我们的电脑有的有摄 ...

  6. SAP 动态选择屏幕实例

    DATA:BEGIN OF gs_sel, werks TYPE marc-werks, "工厂 matnr TYPE mara-matnr, "物料 mtart TYPE mar ...

  7. 你真的懂Python命名吗?

    转载请注明出处️ 作者:测试蔡坨坨 原文链接:caituotuo.top/7417a7f0.html 大家好,我是测试蔡坨坨. 今天,我们来聊一下Python命名那些事儿. 名为万物之始,万物始于无名 ...

  8. 关于我用python表白成功这件事【表白成功】

    520,并非情人所属, 我们可以表白万物, 不管什么时候, 这都是一个特别的日子, 今天,我要表白所有, 心里有我的人! 在这个充满幸福的日子里, 我要把最美好的祝福, 送给心里有我的每一个人: 祝愿 ...

  9. 8. SparkSQL综合作业

    综合练习:学生课程分数 网盘下载sc.txt文件,分别创建RDD.DataFrame和临时表/视图: 分别用RDD操作.DataFrame操作和spark.sql执行SQL语句实现以下数据分析: 总共 ...

  10. 笔记本USB接口案例分析和是实现

    笔记本电脑 笔记本电脑(laptop)通常具备使用USB设备的功能.在生产时,笔记本都预留了可以插入USB设备的USB接口,但具体是什么USB设备,笔记本厂商并不关心,只要符合USB规格的设备都可以 ...