假设$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的更多相关文章

  1. Oracle学习笔记三 SQL命令

    SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)  

  2. Linux下安装Tomcat服务器和部署Web应用

    一.上传Tomcat服务器

  3. linux split 及优化

    split 虽然不好用, 但是还是可以用一下的! 有两个方式拆分, 按固定的行数, 按固定的大小. 默认是 1000 行, 后缀长度为2, 后缀长度N是说, 分片从N个字母/数字 的最小值 到 其最大 ...

  4. Jetty Maven Plugin配置

    官方文档:http://www.eclipse.org/jetty/documentation/current/jetty-maven-plugin.html#maven-config-https 1 ...

  5. android 音乐播放器

    本章以音乐播放器为载体,介绍android开发中,通知模式Notification应用.主要涉及知识点Notification,seekbar,service. 1.功能需求 完善音乐播放器 有播放列 ...

  6. SQL Server 2008 R2——CROSS APPLY 根据数据出现的次数和时间来给新字段赋值

    =================================版权声明================================= 版权声明:原创文章 禁止转载  请通过右侧公告中的“联系邮 ...

  7. 深入理解C++对象模型

    C++对象模型是比较重要的一个知识点,学习C++对象的内存模型,就可以明白C++中的多态原理.类的初始化顺序问题.类的大小问题等. 1 C++对象模型基础 1.1 C++对象中都有哪些东东 C++对象 ...

  8. JMeter学习-038-JMeter Linux 环境配置

    1.1.下载 Download URL:http://mirrors.tuna.tsinghua.edu.cn/apache//jmeter/binaries/apache-jmeter-3.0.tg ...

  9. extentreports报告插件之extentX之服务搭建(三)

    之前两个章节已经写完再extentreports报告插件与testng 的集成,但是发现 每次测试完后,生成的报告都要在单独发送,每个项目都有一份报告,如果项目多的话,管理起来就会很冗余. 这个给大家 ...

随机推荐

  1. 第30篇-main()方法的执行

    在第7篇详细介绍过为Java方法创建的栈帧,如下图所示. 调用完generate_fixed_frame()函数后一些寄存器中保存的值如下: rbx:Method* ecx:invocation co ...

  2. Geocoding Tools(地理编码工具)

    地理编码工具 # Process: 创建地址定位器 arcpy.CreateAddressLocator_geocoding("", "", "&qu ...

  3. Linux系统安装MySql5.7并通过sql脚本导入数据

    为了下载到的MySQL版本和目标系统相互兼容,在开启之前,最好了解目标系统的相关信息. 查询系统版本: cat /etc/issue 查看系统位数 getconf LONG_BIT 选择MySQL 根 ...

  4. WIFI Deauth攻击-爬坑笔记

    这里用Aircrack这款工具进行介绍: 准备工作:无线网卡连接电脑或者虚拟机(免驱的最好),如需驱动请自行安装驱动 1.将无线网卡接入测试电脑Linux虚拟机(装有Aircrack-ng) 2.测试 ...

  5. pycharm环境下配置scrap爬虫环境

    [写在开头] 参考文章后面给出了备注信息,是在解决这个问题的时候,查找的比较有亮点的参考文章,如果本文章写的不太清楚的,可以去原文章进行查看.下面列举的四个文章有参考的成分也有验证的成分,解决办法重点 ...

  6. 实现服务器和客户端数据交互,Java Socket有妙招

    摘要:在Java SDK中,对于Socket原生提供了支持,它分为ServerSocket和Socket. 本文分享自华为云社区<Java Socket 如何实现服务器和客户端数据交互>, ...

  7. [对对子队]会议记录5.19(Scrum Meeting6)

    今天已完成的工作 吴昭邦 ​ 工作内容:搭建第9关 ​ 相关issue:搭建关卡7.8.9 ​ 相关签入:feat: 第9关能够通过 何瑞 ​ 工作内容:搭建第9关 ​ 相关issue:搭建关卡7.8 ...

  8. 2021.8.15考试总结[NOIP模拟40]

    T1 送花 线段树.枚举右端点,线段树记录左端点对应的值. 每次对当前颜色上上次出现的位置到上次出现的位置区间减,上次出现的位置到当前位置区间加. $code:$ 1 #include<bits ...

  9. NKOJ1828 Feed Ratios饲料调配

    题目 好题!高斯消元切了! (其实只是单纯地想吐槽这道出现在"高斯消元"专练里的题,暴搜能过,goudoubuxie"Gauss") 下面是暴搜: #pragm ...

  10. 计算机网络之网络层路由选择协议(自治系统AS、RIP、OSPF、BGP)

    文章转自:https://blog.csdn.net/weixin_43914604/article/details/105313629 学习课程:<2019王道考研计算机网络> 学习目的 ...