[cf1427E]Xum
假设$x$的最高位为$2^{t}$(即$2^{t}\le x<2^{t+1}$),并构造出$y=2^{t}x\oplus x$,不难发现两者仅在第$t$位上均为1,那么根据异或的性质可得$y=(2^{t}+1)x-2^{t+1}$
由于$x$为奇数,即$(x,2^{t+1})=1$,进而也即$(x,y)=1$
通过扩欧求出一组$ax+by=1$的解,并调整使得$0<a\le 2y$且$a\equiv 1(mod\ 2)$,对应的$-2x\le b<0$,根据奇偶性可得$ax$为奇数(且$by$为偶数),那么$ax+by=1$即等价于$ax\oplus (-b)y=1$,由此计算可得
另外,计算过程中需要实现乘法,这借助类似快速幂的做法实现即可
最终操作次数(和时间复杂度)约为$o(\log n)$,数字范围约为$2n^{3}$,可以通过

1 #include<bits/stdc++.h>
2 using namespace std;
3 #define ll long long
4 struct Data{
5 int p;
6 ll x,y;
7 };
8 vector<Data>ans;
9 ll n,m,x,y;
10 void calc(ll n,ll m){
11 m--;
12 ll s=n,sum=n;
13 while (m){
14 if (m&1){
15 ans.push_back(Data{1,s,sum});
16 sum+=s;
17 }
18 ans.push_back(Data{1,s,s});
19 s<<=1,m>>=1;
20 }
21 }
22 void exgcd(ll a,ll b,ll &x,ll &y){
23 if (!b){
24 x=1,y=0;
25 return;
26 }
27 exgcd(b,a%b,y,x);
28 y-=(a/b)*x;
29 }
30 int main(){
31 scanf("%lld",&n);
32 ll t=2;
33 while ((t<<1)<=n)t<<=1;
34 calc(n,t);
35 m=((n*t)^n),ans.push_back(Data{0,n*t,n});
36 exgcd(n,m,x,y);
37 x=(x%m+m)%m;
38 if (x%2==0)x+=m;
39 y=(n*x-1)/m;
40 calc(n,x),calc(m,y);
41 ans.push_back(Data{0,n*x,m*y});
42 printf("%d\n",(int)ans.size());
43 for(int i=0;i<ans.size();i++)
44 if (ans[i].p)printf("%lld + %lld\n",ans[i].x,ans[i].y);
45 else printf("%lld ^ %lld\n",ans[i].x,ans[i].y);
46 return 0;
47 }
[cf1427E]Xum的更多相关文章
- Oracle学习笔记三 SQL命令
SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)
- Linux下安装Tomcat服务器和部署Web应用
一.上传Tomcat服务器
- linux split 及优化
split 虽然不好用, 但是还是可以用一下的! 有两个方式拆分, 按固定的行数, 按固定的大小. 默认是 1000 行, 后缀长度为2, 后缀长度N是说, 分片从N个字母/数字 的最小值 到 其最大 ...
- Jetty Maven Plugin配置
官方文档:http://www.eclipse.org/jetty/documentation/current/jetty-maven-plugin.html#maven-config-https 1 ...
- android 音乐播放器
本章以音乐播放器为载体,介绍android开发中,通知模式Notification应用.主要涉及知识点Notification,seekbar,service. 1.功能需求 完善音乐播放器 有播放列 ...
- SQL Server 2008 R2——CROSS APPLY 根据数据出现的次数和时间来给新字段赋值
=================================版权声明================================= 版权声明:原创文章 禁止转载 请通过右侧公告中的“联系邮 ...
- 深入理解C++对象模型
C++对象模型是比较重要的一个知识点,学习C++对象的内存模型,就可以明白C++中的多态原理.类的初始化顺序问题.类的大小问题等. 1 C++对象模型基础 1.1 C++对象中都有哪些东东 C++对象 ...
- JMeter学习-038-JMeter Linux 环境配置
1.1.下载 Download URL:http://mirrors.tuna.tsinghua.edu.cn/apache//jmeter/binaries/apache-jmeter-3.0.tg ...
- extentreports报告插件之extentX之服务搭建(三)
之前两个章节已经写完再extentreports报告插件与testng 的集成,但是发现 每次测试完后,生成的报告都要在单独发送,每个项目都有一份报告,如果项目多的话,管理起来就会很冗余. 这个给大家 ...
随机推荐
- nodejs 安装 报错解决方案
win10安装nodejs之后,查看版本号在终端输入node -v成功输出版本号,输入npm -v 之后报错...... 反复安装卸载之后,有点奔溃,最后的解决方案是:手动删除"C:\Use ...
- 在Windows Server 2012R2离线安装.net framework3.5
最近新装了一台Windows Server 2012 R2的服务器,安装数据库时,出现了提示安装不上 .net framework3.5的情况,经过网络上多次的资料查找及反复试验终于找到了一个可以解决 ...
- 基于BootStrap的轮播图
准备 先设计一个承载轮播图的区域:四周向外阴影.扁平圆角: 1 #myShuffArea{ 2 width: 50%; 3 height: 300px; 4 border: solid 1px gai ...
- 请问:c语言中d=1/3*3.0;与d=1.0/3*3;d=?有什么区别
请问:c语言中d=1/33.0;与d=1.0/33;d=?有什么区别 d=1/33.0; 这时d=0,d=(1/3)3.0,这里1是整形,1/3也是整形,等于0,所以03.0=0 d=1.0/33; ...
- Golang通脉之方法
方法和接收者 Go语言中的方法(Method)是一种作用于特定类型变量的函数.这种特定类型变量叫做接收者(Receiver).接收者的概念就类似于其他语言中的this或者 self. Go 语言中同时 ...
- 初学python-day4 字典(已更新完)
- 【UE4】读写 Texture 数据
创建texture 方式一 void AActor_Assignment2::TextureFromImage_Internal( const TArray<FColor>& Sr ...
- Java继承中父类和子类构造函数的问题
父类有无参构造函数时(显示或隐式),子类的有参和无参构造函数都是默认调用父类的无参构造函数:当父类只有有参构造函数时,子类可以有有参和无参构造函数,子类有参构造函数必须显式调用父类的有参构造函数,子类 ...
- [对对子队]发布声明Beta
Beta版本的新功能 新增的游戏内容 循环部分关卡 Beta阶段我们制作了游戏的第4-6关,为循环部分关卡.这一部分的关卡设计以编程的循环思想为基础,在流水线中加入了新的命令--循环语句,并以此为核心 ...
- Beta阶段第四次会议
Beta阶段第四次会议 时间:2020.5.20 完成工作 姓名 工作 难度 完成度 ltx 1.对小程序进行修改2.提出相关api修改要求 轻 85% xyq 1.设计所需api文档2.编写相关技术 ...