当前位置: 首页 > news >正文

U249090 密码门 私题题解

题目传送门

题目简要翻译

输入第一行一个询问次数 \(t\),然后是输出的进制 \(n\),接下来每一行都有 \(c\) 进制的 \(a\)\(d\) 进制的 \(b\),输出 \(a\)\(b\) 的各种运算结果(题目上那四种运算)并用 \(n\) 进制表示。

思路

数据超水,暴力模拟就能过。

先用题目上所给公式将所给数字转为十进制,再进行十进制运算,最后转化为 \(n\) 进制结果输出。

那么问题来了:一个数字怎么由十进制转 \(n\) 进制?

证明

例:对于一个 \(n\) 进制数 \((\overline{abcde})_ {n}=(x)_ {10}\) 一定能写成

\[x = an^4+bn^3+cn^2+dn+e \]

的形式,其中低项系数严格小于高项参数(\(e<n,d<n^2,c<n^3,b<n^4,a<n^5\)),我们要把这个十进制数转化为 \(n\) 进制数,相当于知道这个多项式的结果反求系数,设这个多项式的结果为 \(x\),由于 \(e<n\) 我们可以通过 \(x\%n\) 来得到 \(e\),将这个数存下来以后,整个我们将 \(x\) 整除 \(n\),得到

\[x=an^3+bn^2+cn+d \]

再将这个多项式继续如上处理,直到 \(x\) 不能整除 \(n\) 为止,就能将这个多项式各位上的系数依次记录下来,然后输出即可。

void pr(__int128 ans)
{if(ans==0)//一定要判,否则会RE{wr(0);return;}int lans=0;for(int i=1;ans;ans/=n,i++){sans[i]=ans%n;lans=i;}for(int i=lans;i;i--){if(sans[i]>=10&&sans[i]<=35)sans[i]=sans[i]-10+'a';else if(sans[i]>=36&&sans[i]<=61)sans[i]=sans[i]-36+'A';elsesans[i]+='0';putchar(sans[i]);}

转化十进制的过程直接套题目中给出的公式即可。

注意

对于 \(100\%\) 的数据,\(1\le t\le 5\times10^{4}\) , \(2\le n ,c_i,d_i\le 61\) , \(1\le m\le 2 \times 10^{17}\)

这里在相乘的过程中可能会炸 long long,所以要开 __int128才能过。

代码

int t,n,a,b,na,nb;
__int128 ans;
char sa[700],sb[700],sans[1300];
void pr(__int128 ans)
{if(ans==0){wr(0);return;}int lans=0;for(int i=1;ans;ans/=n,i++){sans[i]=ans%n;lans=i;}for(int i=lans;i;i--){if(sans[i]>=10&&sans[i]<=35)sans[i]=sans[i]-10+'a';else if(sans[i]>=36&&sans[i]<=61)sans[i]=sans[i]-36+'A';elsesans[i]+='0';putchar(sans[i]);}
}
signed main()
{t=re(),n=re();while(t--){na=re(),nb=re();a=b=0;cin>>sa+1,cin>>sb+1;int la=strlen(sa+1),lb=strlen(sb+1);for(int i=la;i;i--){if(sa[i]>='a'&&sa[i]<='z')sa[i]-='a'-11;else if(sa[i]>='A'&&sa[i]<='Z')sa[i]-='A'-37;else if(sa[i]>='0'&&sa[i]<='9')sa[i]-='0';}for(int i=lb;i;i--){if(sb[i]>='a'&&sb[i]<='z')sb[i]-='a'-10;else if(sb[i]>='A'&&sb[i]<='Z')sb[i]-='A'-36;else if(sb[i]>='0'&&sb[i]<='9')sb[i]-='0';}for(int i=1;i<=la;i++)a+=sa[i]*pow(na,la-i);for(int i=1;i<=lb;i++)b+=sb[i]*pow(nb,lb-i);ans=a+b,pr(ans),putchar(' ');ans=abs(a-b),pr(ans),putchar(' ');ans=(__int128)a*b,pr(ans),putchar(' ');ans=a%b,pr(ans),putchar('\n');}return 0;
}
http://www.gsyq.cn/news/98691.html

相关文章:

  • 【Vue3】 中 ref 与 reactive:状态与模型的深入理解
  • 双机并联虚拟同步发电机仿真模型:均分负载与优质波形输出,可拓展自适应与光伏储能技术
  • Grep 例程大全
  • 网页前端如何通过JSP实现大文件秒传功能?
  • Ursa.Avalonia样式系统终极指南:5大技巧助你构建企业级UI
  • Asio应用(高级):构建高性能、安全、跨平台的网络系统
  • 实习面试题-Spark SQL 面试题
  • CF1619G Unusual Minesweeper 解题报告
  • 基于vue的个人博客论坛交流网站_sdj10346_springboot php python nodejs
  • 如何使用yolov11训练使用—番茄炭疽病与品质检测数据集 炭疽病症状识别、病害区域检测、成熟果实与腐烂果实区分 目标检测 4类 可直接用于模型训练 YOLO适用的txt格式
  • 四旋翼无人机PID控制仿真模型探索
  • JAVA中如何利用JSP实现视频文件的分片上传?
  • 列出自己网站音频书籍资源方法附php代码
  • 隐式转换,强制转换,字符串,字符的加操作
  • .NET进阶——深入理解Lambda表达式(2)手搓LINQ语句
  • Android中Compose系列之按钮Button
  • wangEditor支持pdf书签目录结构导入功能
  • Agent 结构(LLM + Tool + Executor)
  • 红米10x将一键清理和锁屏加到桌面步骤
  • 台达DVPEH3系列PLC与欧姆龙E5CC温控器通讯及控制实现
  • 192KHz 双声道输入 24 位 AD 转换器国产品牌DP8340兼容CS5340
  • Cameralink采集卡软件EspeedGrab使用讲解:3 保存采集参数
  • XPM与IP模式下FIFO的比较
  • MySQL数据处理(增删改)
  • 电科毕设 stm32 wifi远程可视化与农业灌溉系统(源码+硬件+论文)
  • 55、Ubuntu 系统软件管理全攻略
  • 34、Bash脚本中的循环控制与故障排查
  • 一文搞懂CNN - LSTM - Attention回归预测:新手友好实战
  • Kubernetes Node 管理完全指南:从入门到生产实践
  • const引用