【做题记录】构造题

CF468C Hack it!

题意:

\(F(x)\) 表示 \(x\) 的各个位上的数字之和,如 \(F(1234)=1+2+3+4=10\)

给定 \(a(a\le 10^{18})\) ,请求出任意一组 \(l,r(l,r\le 10^{200})\) ,要求满足:

\[\sum_{i=l}^{r}F(i)\pmod{a}=0 \]

输出 \(l,r\)

$\texttt{solution}$

注意到,若 \(F(x)=p\) ,那么 \(F(x+10^{18})=F(x)+1=p+1\)

那么可以发现,若 \(\sum_{i=0}^{10^{18}-1}F(i)=p\) ,那么有:

\[\sum_{i=1}^{10^{18}}F(i)=sum_{i=1}^{10^{18}-1}+F(10^{18})-F(0)=p+1 \]

因此发现 \(l=a-p,r=a-p+10^{18}-1\) 时恰好能够成立。

因此考虑求出 \(p\)

\[\begin{aligned}\sum_{i=0}^{10^{18}-1}&=45\times 10^{17}+10\times \sum_{i=0}^{10^{17}-1}f(i)\\&=45\times 10^{17}+10\times (45\times 10^{16})+100\times \sum_{i=0}^{10^{16}-1}f(i)\\&=\dots\\&=18\times 45\times 10^{17}\\&=81\times 10^{18}\end{aligned} \]

之后带入式子就可以啦!

typedef unsigned long long ll;
ll a,l,r,p,inf=1e18;
int main()
{a=rd(),p=inf%a*9llu%a*9llu%a;printf("%llu %llu\n",a-p,a-p+inf-1llu);return 0;
}

CF1491F Magnets

交互、二分。

早苗有 \(n\) 块磁石,编号为 \(1,2,\cdots,n\)。每块磁石的磁极可能是正极,负极,也可能没有磁性。她希望你能帮她找出所有没有磁性的磁石。

万幸的是,你有一台磁力检测仪。你每次可以将每个磁石放在这台机器的左托盘,右托盘或者不放。

机器将会返回此时的磁力强度。设托盘左边有 \(n_1\) 个磁石为正极,\(s_1\) 个磁石为负极,托盘右边中有 \(n_2\) 磁石为正极,\(s_2\) 个磁石为负极,则返回的磁力强度为 \(n_1n_2+s_1s_2-n_1s_2-n_2s_1\)

如果一次测试中磁力强度的绝对值大于 \(n\),这台机器就会坏掉。

你需要在 \(n+\lfloor\log_2n\rfloor\) 次测试内找到所有没有磁性的磁石的编号,同时不能弄坏机器。

保证存在至少 \(2\) 块磁石有磁性且至少 \(1\) 块磁石没有磁性。

$\texttt{solution}$

先化简式子发现交互的返回值就是 \((n_1-s_1)(n_2-s_2)\)

由于正负极石头放在一起会导致 \(n,s\) 会都大于 \(0\) ,使问题变得更为困难。

那么考虑每次查询只对一块石头与其他一堆石头之间进行询问。

那么如果我们已经知道了一块有磁性的此时,就可以非常容易的知道其他所有的此时是否有磁性。

之后考虑如何才能找出有磁性的石头,直接枚举肯定是不行的,最坏都会到 \(O(n^2)\)

我们可以从 \(1\)\(n\) 开始枚举 \(i\),询问 \([1,i-1]\)\(i\)。若询问结果不为 \(0\),则 \([1,i-1]\) 中必然有一块有磁性的石头,而 \(i\) 也一定是有磁性的。因此可以找出一块有磁性的石头。

之后我们是否可以 \(O(n)\) 检查所有石头了呢?还是不行。。。

考虑到答案不能超过 \(n+\log n\),所以我们只能将上面第二块石头之后,也就是 \([i+1,n]\) 中的石头判断一遍。这样到现在为止总共用了 \(n-1\) 次操作。

\([1,i-1]\) 中只有 \(1\) 快有磁性的石头,所以我们可以二分出这块石头的位置,找出这最后一块有磁性的石头。那么我们就做完啦。

int T,n,Last,pos,cnt;
int ans[Maxn];
inline int query(int nl,int nr,int k)
{printf("? %d %d\n",nr-nl+1,1);for(int i=nl;i<=nr;i++) printf("%d%c",i,(i==nr)?'\n':' ');printf("%d\n",k);fflush(stdout);return rd();
}
inline void print()
{printf("! %d ",cnt);for(int i=1;i<=cnt;i++) printf("%d%c",ans[i],(i==cnt)?'\n':' ');fflush(stdout);
}
int main()
{T=rd();while(T--){n=rd(),pos=-1,cnt=0;for(int i=2;i<=n && pos==-1;i++)if(query(1,i-1,i)) pos=i;for(int i=pos+1;i<=n;i++) if(!query(i,i,pos)) ans[++cnt]=i;int nl=1,nr=pos-1;while(nl<=nr){int mid=(nl+nr)>>1;if(query(1,mid,pos)) Last=mid,nr=mid-1;else nl=mid+1;}for(int i=1;i<pos;i++) if(i!=Last) ans[++cnt]=i;print();}return 0;
}

CF1586F Defender of Childhood Dreams

给定一张竞赛图(点数 \(\le 1000\)),对于所有 \(a<b\),都有一条由 \(a\)\(b\) 的有向边,并且每一条边都有一个颜色。现在要求所有长度大于等于 \(k\) 的路径上都有 \(\ge 2\) 中颜色。求出整张图中出现最少出现颜色的数量与边的染色方案。

$\texttt{solution}$

考虑将序列分为许多长度不超过 \(k\) 个块,在块与块间连接相同颜色的边。这样可以保证在块与块间转移的边不会形成 \(\ge k\) 长度的路径。

在每一个块内部再进行同样的拆分(但在块内的颜色要与块外的颜色不同),递归进行即可。

#define Maxn 1005
int n,k,ans;
int col[Maxn][Maxn];
void solve(int l,int r,int c)
{if(l==r) return;int len=(r-l+k)/k,tot=(r-l+len)/len;for(int i=1,x,y;i<tot;i++)for(int j=i+1;j<=tot;j++)for(int p=1;p<=len;p++)for(int q=1;q<=len;q++){x=l+(i-1)*len+p-1,y=l+(j-1)*len+q-1;if(y>r) break;col[x][y]=c;}for(int i=1;i<=tot;i++) solve(l+(i-1)*len,min(l+i*len-1,r),c+1);
} 
int main()
{n=rd(),k=rd();solve(1,n,1);for(int i=1;i<n;i++) for(int j=i+1;j<=n;j++) ans=max(ans,col[i][j]);printf("%d\n",ans);for(int i=1;i<n;i++) for(int j=i+1;j<=n;j++) printf("%d ",col[i][j]);printf("\n");return 0;
}

CF715D Create a Maze

有一个 \(n\times m\) 的迷宫,每一格都是一个房间,每两个相邻的房间之间有一扇门。

在所有门中,有 \(k\) 扇是锁着的,不能通行,其余没有限制。

现在你在 \((1,1)\),需要走到 \((n,m)\),只能向下或向右走。

设总共的行走方案有 \(T\) 种。

现在给出 \(T\),要求设计出一个迷宫满足行走方案为 \(T\)

要求:\(n,m\le 50,k\le 500,T\le 10^{18}\)

$\texttt{solution}$

这一题需要按照 \(T\) 的进制来解决问题。

首先考虑用二进制,那么我们可以这样设计方案:

这样我们就可以用二进制来表示出任何 \(\le 2^{49}\)\(T\) 啦!

然而我们发现如果我们将我们的以 \(2\times 2\) 改为 \(3\times 3\),可以将前面的二进制变为六进制!!

之后构造就比较类似,我们只要改为两路 \(1\) 和中间的 \(3\times 3\) 即可。

这样最大可以表示 \(6^{24}>10^{18}\),可以解决这道题啦!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/318171.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Star Way To Heaven (prim最小生成树) // [ NOIP提高组 2014]飞扬的小鸟(DP)

文章目录T1&#xff1a;Star Way To Heaven题目题解代码实现T2&#xff1a;飞扬的小鸟题目题解代码实现T1&#xff1a;Star Way To Heaven 题目 小 w 伤心的走上了 Star way to heaven。 到天堂的道路是一个笛卡尔坐标系上一个 n*m 的长方形通道 顶点在 (0,0) 和 (n,m) 。 小…

IdentityServer4-客户端的授权模式原理分析(三)

在学习其他应用场景前&#xff0c;需要了解几个客户端的授权模式。首先了解下本节使用的几个名词Resource Owner&#xff1a;资源拥有者&#xff0c;文中称“user”&#xff1b;Client为第三方客户端&#xff1b;Authorization server为授权服务器&#xff1b;redirection URI&…

[2019 牛客CSP-S提高组赛前集训营4题解] 复读数组(数论)+ 路径计数机(数上DP)+ 排列计数机(线段树+二项式定理)

文章目录T1&#xff1a;复读数组题目题解代码实现T2&#xff1a;路径计数机题目题解代码实现T3&#xff1a;排列计数机题目题解CODET1&#xff1a;复读数组 题目 有一个长为nk的数组&#xff0c;它是由长为n的数组A1,A2,…,An重复k次得到的。 定义这个数组的一个区间的权值为…

微软携手 Docker 打造 CNAB,分布式应用来了!

微软中国MSDN 前天Microsoft Connect(); 2018发布的众多最新科技&#xff0c;都让全球开发者惊艳不已。其中一项最令开发者瞩目并迫不及待——微软联合Docker发布了云本地应用捆绑包&#xff08;Cloud Native Application Bundle&#xff0c;以下简称CNAB&#xff09;&#xff…

[C++]试一试结构体struct node的构造函数

可直接点击跳转到构造函数处结构体概念定义结构体定义结构体及结构体变量结构体变量的特点成员调用成员函数调用结构体的构造函数Upd1Upd2Upd3结构体概念 在实际问题中&#xff0c;一组数据往往具有不同的数据类型。 例如&#xff1a;人口大普查时&#xff0c;需要记录每一个人…

[多校联考-西南大学附中]切面包(线段树/概率与期望)+ Slow Path Finding Algorithm(拓扑排序/DP)+ 分数转化(数论)

文章目录T1&#xff1a;分数转换题目题解代码实现T2&#xff1a;Slow Path Finding Algorithm题目题解代码实现T3&#xff1a;切面包题目题解代码实现T1&#xff1a;分数转换 题目 Time limit: 1.5 seconds Memory limit: 512 megabytes 给定一个十进制小数&#xff0c;请你…

P3992 [BJOI2017]开车

P3992 [BJOI2017]开车 题意&#xff1a; 题解&#xff1a; 我们要先将问题转换 圈是车&#xff0c;x是加油站。红色部分为车移动的路线 数组a是车数量的前缀和 数组b是加油站的前缀和 而a[i]与b[i]的差的绝对值就是对应的红色路被走的次数 现在车发生位置移动&#xff0c;b数…

IdentityServer4-MVC+Hybrid实现Claims授权验证(四)

上节IdentityServer4-客户端的授权模式原理分析&#xff08;三&#xff09;以对话形式&#xff0c;大概说了几种客户端授权模式的原理&#xff0c;这节重点介绍Hybrid模式在MVC下的使用。且为实现IdentityServer4从数据库获取User进行验证&#xff0c;并对Claim进行权限设置打下…

漫谈何时从单体架构迁移到微服务?

面对微服务如火如荼的发展&#xff0c;很多人都在了解&#xff0c;学习希望能在自己的项目中帮得上忙&#xff0c;当你对微服务的庐山真面目有所了解后&#xff0c;接下来就是说服自己了&#xff0c;到底如何评估微服务&#xff0c;什么时候使用微服务&#xff0c;什么时间点最…

[CSP-S Day1,Day2 游记]提高组考后总结及学习编程C++以来的心得体会

怀着沉重而感慨的心情写下了这篇blog考试中暴露的问题Day1Day2综上解决方法学习历程及以来的心得体会职业精神这篇博客我可能会写好几天&#xff0c;我jio得这篇博客对我的学习历程以及态度产生深刻影响考试中暴露的问题 首先先说这次提高组考试的每道题所遇到的各种问题吧 Da…

【.NET Core项目实战-统一认证平台】第十二章 授权篇-深入理解JWT生成及验证流程...

上篇文章介绍了基于Ids4密码授权模式&#xff0c;从使用场景、原理分析、自定义帐户体系集成完整的介绍了密码授权模式的内容&#xff0c;并最后给出了三个思考问题&#xff0c;本篇就针对第一个思考问题详细的讲解下Ids4是如何生成access_token的&#xff0c;如何验证access_t…

P5049 [NOIP2018 提高组] 旅行

P5049 [NOIP2018 提高组] 旅行 题意&#xff1a; 一棵树(可能是基环树)&#xff0c;从1出发&#xff0c;每到达一个新的点就记录下编号。求一种走法使得记录下来的编号字典序最小。 1≤n≤500000 mn−1 或 mn 题解&#xff1a; 如果不是基环树&#xff0c;那直接每次走字典…

[2019CSP-S Day1]提高组Day1题解(格雷码[模拟(k转二进制取反的做法带证明)] + 括号树[DP] + 树上的数(暴力+菊花图+单链))

Day1T1&#xff1a;格雷码题目题解代码实现T2&#xff1a;括号树题目题解代码实现T3&#xff1a;树上的数题目10pts暴力题解代码实现25pts菊花图题解代码实现25pts单链题解代码实现T1&#xff1a;格雷码 题目 通常&#xff0c;人们习惯将所有 n位二进制串按照字典序排列&…

使用PerfView监测.NET程序性能(四):折叠,过滤和时间范围选择

在上一篇文章使用PerfView监测.NET程序性能&#xff08;三&#xff09;&#xff1a;分组中&#xff0c;我们使用了Perfview的分组功能。分组功能旨在对某些函数按照某个格式进行分组&#xff0c;以减少视图中的各种无关函数的数量。但仅有分组还不够&#xff0c;有时我们想将一…

带旋treap概念及模板,带例题:普通平衡树

带旋Treap二叉查找树BST(Binary Search Tree)定义Treap定义模板合集&#xff08;均为O(logn)O(logn)O(logn)&#xff09;push_up模板旋转模板插入模板删除模板查找前驱模板查找后驱模板查找键值key模板查找节点的修正值rank模板PS&#xff1a;rd的比较问题例题&#xff1a;普通…

微服务系列实践 .NET CORE

从事这个行业转眼已经6年了&#xff0c;从当初刚毕业的在北京朝八晚十&#xff0c;从二环到五环&#xff0c;仍每天精力充沛的小愤青&#xff1b;再到深圳一点一滴的辛勤在软件行业的耕种&#xff0c;从当初单体应用架构到现在微服务架构的经历&#xff0c;回想起来自己的收获倒…

P2607 [ZJOI2008]骑士

P2607 [ZJOI2008]骑士 题意&#xff1a; n个点n个边&#xff0c;每个点都有权值&#xff0c;相邻的点不能同时选择&#xff0c;问如何选择能使得权值最大 题解&#xff1a; 这个题很有P1352 没有上司的舞会这个题的感觉&#xff0c;唯一的区别是那个题保证是树&#xff0c;…

模板:线段树优化建图

前言 百川到海&#xff0c;天下归一 解析 线段树优化建图是用于对一个区间的点连边时的优化方法 建一棵in树一棵出树分别往上和下指即可 大概长这样 &#xff08;pia的洛谷的照片&#xff09; 建树 正常动态开点即可 void build(int &k,int l,int r){tr[ktot](tree){0…

[非旋平衡树]fhq_treap概念及模板,例题:普通平衡树,文艺线段树

文章目录概念全套模板push_up模板split拆树模板(按权值拆)split拆树模板(按个数拆)merge合并模板&#xff08;地址版&#xff09;merge合并模板&#xff08;带返回根&#xff09;区间模板insert插入模板delete删除模板find_kth找第k大模板get_rank找排名模板pre找前驱模板suf找…

surging 微服务引擎 1.0 正式发布

surging 是一个分布式微服务引擎,提供高性能RPC远程服务调用&#xff0c;服务引擎支持http、TCP、WS、Mqtt协议,采用Zookeeper、Consul作为surging服务的注册中心&#xff0c;集成了哈希一致性&#xff0c;随机&#xff0c;轮询、压力最小优先作为负载均衡的算法&#xff0c;底…