hdu 5690 All X

Problem Description
F(x,m) 代表一个全是由数字x组成的m位数字。请计算,以下式子是否成立:

F(x,m) mod k ≡ c

Input
第一行一个整数T,表示T组数据。
每组测试数据占一行,包含四个数字x,m,k,c

1≤x≤9

1≤m≤1010

0≤c

#include<iostream>
#include<cstring>
#include<algorithm>
#include<string>
#include<cmath>
using namespace std;
int a[100000],b[100000];
int main()
{   
    int t;
    cin>>t;
    for(int i=1;i<=t;i++)
    {
    memset(a,-1,sizeof(a)),memset(b,-1,sizeof(b));
    long long x,m,k,c,ans;
    cin>>x>>m>>k>>c;    
     ans=0;
        int sec=-1,fir=-1,d;
    for(int j=1;j<=m;j++)
    {
        ans=ans*10+x;
        ans%=k;
        if(a[ans]==-1)
        {
            b[j]=ans;
            a[ans]=j;
        }
        else
        {
            sec=j,fir=a[ans];
            d=sec-fir;
            break;
         } 
    }
     if(sec!=-1)
     m=(m-fir)%d+fir;  // 在循环中的位置
    int f=b[m];
    cout<<"Case #"<<i<<":"<<endl; 
    if(f==c)
    cout<<"Yes\n";
    else
    cout<<"No\n";
    }
    return 0;
 } 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值