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

怎么选择赣州网站建设wordpress 单栏主题

怎么选择赣州网站建设,wordpress 单栏主题,seo网站优化培,项目计划书ai生成记录下 A 题赤石过程 \sout{记录下A题赤石过程} 记录下A题赤石过程 套着数学外衣的字符串模拟题,首先,题目要求大于 n n n 的最小的 m m m 的倍数或者数字中出现 m m m 大于不好处理,我们给它加 1 1 1 变为大于等于,这样如果…

记录下 A 题赤石过程 \sout{记录下A题赤石过程} 记录下A题赤石过程

在这里插入图片描述

套着数学外衣的字符串模拟题,首先,题目要求大于 n n n 的最小的 m m m 的倍数或者数字中出现 m m m

大于不好处理,我们给它加 1 1 1 变为大于等于,这样如果就是 + 1 +1 +1 的那个数也可以直接输出

首先我们将 n + 1 n+1 n+1 m m m 的倍数或者 n + 1 n+1 n+1 包含 m m m 的情况判掉,那么剩下的需要加上一些数构造 m m m 的倍数,或者数字中有 m m m 。首先我们会有一个上界,就是构造 m m m 的倍数所需要的数 r g rg rg ,我们加的数不超过 r g rg rg .

m m m 的数位为 j j j

然后我们考虑数字中构造 m m m ,一般的,我们发现其实只要数字最后的 18 18 18 位即可,因为 m ≤ 1 0 9 m\leq10^9 m109,我们每次让后缀从 i i i 开始变成 0 0 0,第 i i i 位之前的 j j j 位变成 m m m ,变成 m m m 也有两种情况一种是那 j j j 位数大于 m m m ,我们需要要让这些位都变成 0 0 0 , 然后再让那 j j j 位变成 m m m ,另一种情况就是那 j j j 位数小于 m m m ,我们只要让他们变成 m m m 即可。

特别的,我们还有一些特殊的情况,通过某些进位,让很前面的数变成 m m m ,那我们就去匹配 m − 1 m-1 m1 ,代价是让后缀全变 0 0 0 的代价,我们只需要找一次,做一次 1 e 6 1e6 1e6 的高精度减法是可以接受的

最后用 n + 1 n+1 n+1 加上我们需要额外加的数 c o s t cost cost 即是答案

还有一个特判,如果 n ≤ m n\leq m nm,答案就是 m m m

#pragma GCC optimize(3,"Ofast","inline")
#include<bits/stdc++.h>
using namespace std;
using i64 = long long;
using u64 = unsigned long long;
using i128 = __int128;string add(string &a,string &b) {int n = a.size(), m = b.size();int L = max(n, m);string res;res.reserve(L + 1);int carry = 0;for (int i = 0; i < L; ++i) {int da = (i < n ? a[i] - '0' : 0);int db = (i < m ? b[i] - '0' : 0);int sum = da + db + carry;res.push_back(char('0' + (sum % 10)));carry = sum / 10;}if (carry) {res.push_back(char('0' + carry));}//结果自然没有“前导”零的问题,因为倒序,低位在前return res;
}string subtract(const string &a, const string &b) {int n = a.size(), m = b.size();string res;res.reserve(n);int borrow = 0;for (int i = 0; i < n; ++i) {int da = a[i] - '0' - borrow;int db = (i < m ? b[i] - '0' : 0);if (da < db) {da += 10;borrow = 1;} else {borrow = 0;}res.push_back(char('0' + (da - db)));}// 去掉“高位”多余的 0(即倒序串末尾的 '0')while (res.size() > 1 && res.back() == '0') {res.pop_back();}return res;
}u64 to_num(string &s){          //倒着的数字u64 res = 0;for(int i=s.size()-1;i>=0;--i){res = res*10ll+(s[i]-'0');}return res;
}string s;
u64 m,lm,lmminus1,ls,rg=0;
u64 base[22];void solve(){rg=0;//清空 cin>>s>>m;string sm = to_string(m);string mminus1 = to_string(m-1);reverse(s.begin(),s.end());reverse(sm.begin(),sm.end());reverse(mminus1.begin(),mminus1.end());string one = "1";string sadd1 = add(s,one);swap(sadd1,s);//s+=1if(s.size()<=sm.size()){u64 ss= to_num(s),ssm = to_num(sm);if(ss<=ssm){cout<<ssm<<"\n";return;}}ls = s.size(),lm = sm.size(),lmminus1 = mminus1.size();//求可加上界u64 b = 1;for(int i = 0;i<ls;++i){(rg+=(1LL*(s[i]-'0')*b)%m)%=m;(b*=10LL)%=m;}rg = m-rg;if(rg==m){      //已经是倍数reverse(s.begin(),s.end());cout<<s<<"\n";return;}//查看数字中有没有mfor(int i = 0;i+lm-1<ls;++i){string tmp = s.substr(i,lm);u64 tmp_num = to_num(tmp);if(tmp_num==m){reverse(s.begin(),s.end());cout<<s<<"\n";return;}}u64 cost = rg;//从个位匹配m,匹配18位for(int i = 0;i+lm-1<=18&&i+lm-1<ls;++i){string tmp = s.substr(i,lm);            //本来就是反着的u64 tmp_num=to_num(tmp);//cout<<i<<" "<<tmp_num<<" ";if(tmp_num<=m){string tmp2=s.substr(0,i);u64 tmp_num2 = to_num(tmp2);cost = min(cost,(m-tmp_num)*base[i]-tmp_num2);}else{if(i==0) continue;   //如果是个位,没有办法补0string tmp2=string(i+lm,'0')+"1"; //索引是i+lm-1 总数要加1string tmp3 = to_string(m*base[i]);//00000mstring res = subtract(tmp2,tmp3);if(res.size()>18){continue;   //肯定超出上限}else{cost = min(cost,to_num(res));}}}//从十位匹配m-1,找离个位最近的,只做一次for(int i = 1;i+lmminus1-1<ls;++i){string tmp = s.substr(i,lmminus1);if(tmp==mminus1){//匹配上了,花费是最低位j 10^j-后缀string now1 = string(i,'0')+sm; //0000smstring now2;if(i>0) now2=s.substr(0,i)+mminus1;//xxxxxtmpelse now2=mminus1;string res = subtract(now1,now2);if(res.size()>18){break;  //肯定超出上限}else{cost = min(cost,to_num(res));}break;}else continue;}string cost_str = to_string(cost);reverse(cost_str.begin(),cost_str.end());string ans = add(s,cost_str);reverse(ans.begin(),ans.end());cout<<ans<<'\n';
}signed main(){ios::sync_with_stdio(0);cin.tie(0);base[0]=1;for(int i = 1;i<=19;++i) base[i] = base[i-1]*10LL;int t=1;cin>>t;while(t--) solve();return 0;
}
http://www.dtcms.com/wzjs/588845.html

相关文章:

  • 好用的海报设计网站上海网站备案流程
  • 快速网站模板公司简述网络营销与传统营销的区别
  • 南昌企业做网站设计离我最近的广告公司在哪里
  • 工作室推广网站wordpress页面布局修改器
  • 邹平建设网站学校网站的建设需求
  • 做职业测评的网站百度一下网址是多少
  • 厦门 网站建设 闽icp湖北省网站备案
  • 服务预约网站怎么建设网站建设必须买主机吗
  • 网站对网络营销的作用长沙专业做网站公司有哪些
  • 网站建设后如何放在网上wordpress安装器
  • 广州建设企业网站公司wordpress 会员投稿
  • 注册公司怎么取名字如何优化搜索引擎关键词
  • 吉林市网站建设公司重庆专业的网站建设公司
  • 国外网站流量查询建工网校官网app
  • 网站建设公司广告词芜湖有没有做网站的
  • 网站怎样做网银支付做网站的公司一般怎么培训销售
  • 外国建筑网站个体工商户注册公司流程和费用
  • 个人网站设计模板网站轮播图
  • 最好的免费网站空间怎么用记事本做钓鱼网站
  • 手机网站开发技术pdf没有icp许可证 举报一个准吗
  • 网站开发业务视频网站开发 博客园
  • 站点推广名词解释百度搜索量
  • 河北网站建设多少钱网站开发分析
  • 网站关键词排名优化系统泰安网络公司哪里找
  • 家居建材网站源码做网站要用什么软件图文教程
  • 宜昌平台网站建设h5页面制作案例
  • 农业网站建设方案 ppt乐平市网站建设
  • 网站开发毕设答辩软件网站建设公司
  • 门户网站运营厦门logo设计公司
  • 网站开发图品牌logo设计公司