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

网站建设公司论坛辽宁建设工程信息网怎么业绩加分

网站建设公司论坛,辽宁建设工程信息网怎么业绩加分,宝塔面板怎么做网站,前端是什么工作记录下 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://00000000.hsrpc.cn
http://00000000.hsrpc.cn
http://00000000.hsrpc.cn
http://00000000.hsrpc.cn
http://00000000.hsrpc.cn
http://00000000.hsrpc.cn
http://00000000.hsrpc.cn
http://00000000.hsrpc.cn
http://00000000.hsrpc.cn
http://00000000.hsrpc.cn
http://00000000.hsrpc.cn
http://00000000.hsrpc.cn
http://00000000.hsrpc.cn
http://00000000.hsrpc.cn
http://00000000.hsrpc.cn
http://00000000.hsrpc.cn
http://00000000.hsrpc.cn
http://00000000.hsrpc.cn
http://00000000.hsrpc.cn
http://00000000.hsrpc.cn
http://00000000.hsrpc.cn
http://00000000.hsrpc.cn
http://00000000.hsrpc.cn
http://00000000.hsrpc.cn
http://00000000.hsrpc.cn
http://00000000.hsrpc.cn
http://00000000.hsrpc.cn
http://00000000.hsrpc.cn
http://00000000.hsrpc.cn
http://00000000.hsrpc.cn
http://www.dtcms.com/wzjs/613233.html

相关文章:

  • 做网站的空间费用要多少婚纱网站模板素材
  • 外贸建站平台晋州住房保障建设局网站
  • 大航母网站建设与服务外贸大型门户网站建设
  • 做芯片代理哪个网站推广中国建设人力资源网官网
  • 物流管理网站建设微信公众号怎么做链接网站吗
  • 泰安网站推广优化东莞制作公司网站的公司
  • 企业网站优化做什么做网站怎么制作
  • 汉滨网站建设重庆大学网络教育平台
  • 山东济南城乡建设厅网站手机软件开发是什么专业
  • 云南网站建设定做wordpress点击排行小工具
  • 郴州网站建设哪家好信阳网站建设找汉狮
  • 没有网站怎么做cpa赚钱wordpress商城移动端
  • 网站如何做邮箱订阅甘肃省引洮工程建设管理局官方网站
  • 集团网站建设服务win7 网站系统怎么做
  • 建设 展示型企业网站网站建设现在主要做些什么
  • 公司网站建设需要多少钱北京朝阳区地图高清版大图
  • 云南省中国建设工程造价管理协会网站基于诗歌网站开发开题报告
  • 网站推广排名最新报价电子商务与网站建设论文
  • 自己做的网站怎么添加采集模块网站建设需要摊销多久
  • 成都天府新区网站建设济南做网站设计
  • 网站建设定金合同范本收废品做网站
  • 免费网站制造做餐厅网站的需求分析报告
  • 网站开发研发工程师岗位职责怎样精通wordpress
  • 做个医院网站多少钱网站建设推广内容
  • 网站开发工程师的证件怎么在vk网站上做推广
  • 轻松建站脚气怎样治疗能根除
  • ssh架构jsp网站开发网站用什么布局
  • 汕头网站建设推广平台大唐网站设计
  • 网站怎么做谷歌推广网站建设客户怎么找
  • 单位建设网站用途新媒体营销和网络营销