CF Round# 449 Div2 B. Chtholly's request

来源:互联网 发布:java rsa 公钥 私钥 编辑:程序博客网 时间:2024/05/29 23:45

简单思维构造题

      题目:cycl数:回文数且长度必须为偶数;求前k个cycl数之和求mod p后的值。

    ·长度为偶数降低了难度;偶数即取数前一半的数为任意正整数;

    ·例如: 前5个cycl数的前半部分为1、2、3、4、5(11、22、33、44、55   

    ·编程分三部分:

             ·枚举前k个cycl的前半部分i

             ·对每个i,需要知道它的位数tot

             ·在将i的倒置b求出

             ·第i个cycl数值为 i*10^(tot)+b;

     ·编程时注意: cycl数可能超过int ;如果i为int,则必须强制类型转换,否则 i*10^(tot)会超出int范围;

#include <iostream>#include <stdio.h>#include <string.h>using namespace std;int a[]={1,10,100,1000,10000,100000,1000000,10000000};int main(){    int k,p;    long long ans=0;    cin>>k>>p;    for(int i=1;i<=k;++i)    {        int tot;        for(int j=0;j<7;++j)            if(i>=a[j])tot=j;            else break;        int t=0;int b=i;        for(int j=0;j<=tot;++j)        {            t+=a[tot-j]*(b%10);            b/=10;        }       // cout<<t<<endl;        ans=(ans+(long long)i*(long long)a[tot+1]+t)%p;    }    cout<<ans<<endl;    return 0;}


原创粉丝点击