intellij idea安装 二叉树排序 idea button module Movejs 软件测试项目实战案例 两个正态分布相乘 hadoop特点 网络游戏server编程 pcie转sata 安卓虚拟机运行windows matlab不等于 matlab取实部 mysql数据库 python高级 python环境搭建 python学习教程 python中re模块 python如何调用函数 python代码 python插件 java中的队列 java替换字符串 java获取当前线程 修改tomcat端口 c语言表白代码 思源黑体cn 反转颜色 剑三醉猿 php四舍五入 说话不算数的经典语句 电脑听歌识曲 pr放大画面 arm体系结构与编程 c4d挤压怎么用 微信公众号点餐系统 windowsjs延时函数 工程地质手册 appsync补丁
当前位置: 首页 > 学习教程  > 编程语言

C. Hacking Cyphe(大数取mod)

2021/2/13 20:16:52 文章标签: 测试文章如有侵权请发送至邮箱809451989@qq.com投诉后文章立即删除

https://codeforces.com/problemset/problem/490/C 题意: 给一个数字串,和两个整数a,b。 问能否将该串分成两部分,其前后两部分分别被这两个整数整除。 思路: 大数取mod,字符串Mod后由于取模的公式可得是等价的。 然后枚举断点i #inclu…

https://codeforces.com/problemset/problem/490/C


题意:

给一个数字串,和两个整数a,b。

问能否将该串分成两部分,其前后两部分分别被这两个整数整除。

思路:

大数取mod,字符串Mod后由于取模的公式可得是等价的。

然后枚举断点i

#include<iostream>
#include<vector>
#include<queue>
#include<cstring>
#include<cmath>
#include<map>
#include<set>
#include<cstdio>
#include<algorithm>
#define debug(a) cout<<#a<<"="<<a<<endl;
using namespace std;
const int maxn=1e6+100;
typedef long long LL;
inline LL read(){LL x=0,f=1;char ch=getchar();	while (!isdigit(ch)){if (ch=='-') f=-1;ch=getchar();}while (isdigit(ch)){x=x*10+ch-48;ch=getchar();}
return x*f;}
char str[maxn];
LL pre[maxn],suf[maxn];
LL mod=0;
LL ksm(LL a,LL k){LL res=1;while(k>0){if(k&1) res=res*a%mod;k>>=1;a=a*a%mod;}return res%mod;}
int main(void)
{
  cin.tie(0);std::ios::sync_with_stdio(false);
  cin>>(str+1);
  LL a,b;cin>>a>>b;
  mod=b;
  LL len=strlen(str+1);
  for(LL i=1;i<=len;i++){
     pre[i]=(pre[i-1]*10%a+(str[i]-'0')%a)%a;
  }
  LL cnt=0;
  for(LL i=len;i>=1;i--){
     suf[i]=( ( (str[i]-'0')%b*ksm(10,cnt)%b)%b+suf[i+1]%b )%b;
     cnt++;
  }
    /*
  for(LL i=1;i<=len;i++) cout<<pre[i]<<" ";
  cout<<"\n";
  for(LL i=1;i<=len;i++) cout<<suf[i]<<" ";
  cout<<"\n";
*/
  LL pos1=0;LL pos2=0;bool flag=1;
  for(LL i=1;i<=len;i++){
    if(pre[i]==0&&suf[i+1]==0&&str[i+1]!='0'){
        pos1=i;pos2=i+1;
        flag=0;
        break;
    }
  }
  ///debug(pos1);debug(pos2);
  if(flag==1||pos2==0||pos1==0||pos2>len||pos1>len) cout<<"NO"<<"\n";
  else{
    cout<<"YES"<<"\n";
    for(LL i=1;i<=pos1;i++){
        cout<<str[i];
    }
    cout<<"\n";
    for(LL i=pos2;i<=len;i++){
        cout<<str[i];
    }
    cout<<"\n";
  }
return 0;
}

 


本文链接: http://www.dtmao.cc/news_show_700431.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?