全x数字

contest8-T2

题目描述

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

F(x,m) mod k  c

输入

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

输出

对于每组数据,输出两行: 第一行输出:"Case #i:"i代表第i组测试数据。 第二行输出“Yes 或者 No”,代表四个数字,是否能够满足题目中给的公式。

样例输入

3
1 3 5 2
1 3 5 1
3 5 99 69

样例输出

Case #1:
No
Case #2:
Yes
Case #3:
Yes

提示

对于第一组测试数据:111 mod 5 = 1,公式不成立,所以答案是”No”,而第二组测试数据中满足如上公式,所以答案是 Yes”。


1<=x<=9   1<=m<=10^10    0<=c<k<=10000



百度之星初赛的原题,当时没啥思路,没想到考试的时候一下子就想出来了

一个m位的全x数字就是(10^0+10^1+10^2+10^3....+10^(m-1))*x

10^0加到10^(m-1)可以用快速幂求和解决

判断是否模k=c即可

#include<cstdio> 
#include<iostream> 
#include<cstring> 
#define ll long long 
using namespace std; 
int cas; 
ll x,m,mod,c,ans; 
ll mi[105],sum[105]; 
ll quick(ll k,int d) 
{ 
    if(k==1) return 10; 
    if(mi[d]!=-1) return mi[d]; 
    ll s=(quick(k/2,d+1)*quick(k/2,d+1))%mod; 
    if(k%2==1) s=(s*10)%mod; 
    return mi[d]=s; 
} 
ll solve(ll k,int d) 
{ 
    if(k==1) return 10; 
    if(sum[d]!=-1) return sum[d]; 
    ll s=((solve(k/2,d+1)*quick(k/2,d+1))%mod+solve(k/2,d+1))%mod; 
    if(k%2==1) s=(s+quick(k,d))%mod; 
    return sum[d]=s; 
} 
int main() 
{ 
    cin>>cas; 
    for(int i=1;i<=cas;i++)  
    { 
        memset(sum,-1,sizeof(sum)); 
        memset(mi,-1,sizeof(mi)); 
        scanf("%lld%lld%lld%lld",&x,&m,&mod,&c); 
        m--; 
        ans=solve(m,1)+1; 
        ans=(ans*x)%mod; 
        printf("Case #%d:\n",i); 
        if(ans%mod==c) printf("Yes\n");else printf("No\n"); 
    } 
    return 0; 
} 



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
HBuilderX是一个集成开发环境(IDE),主要用于开发Web、移动端和桌面应用程序。它提供了丰富的功能和工具,可以帮助开发者更高效地进行代码编写、调试和发布。 关于猜数字游戏,HBuilderX本身并不提供游戏功能,但你可以使用HBuilderX来开发一个数字游戏的应用程序。下面是一个简单的示例代码,演示了如何使用HBuilderX和JavaScript来实现一个数字游戏: ```html <!DOCTYPE html> <html> <head> <title>猜数字游戏</title> </head> <body> <h1>猜数字游戏</h1> <p>输入一个1到100之间的整数:</p> <input type="number" id="guessInput"> <button onclick="checkGuess()">猜一下</button> <p id="result"></p> <script> var targetNumber = Math.floor(Math.random() * 100) + 1; var guessCount = 0; function checkGuess() { var guessInput = document.getElementById("guessInput"); var guess = parseInt(guessInput.value); if (isNaN(guess) || guess < 1 || guess > 100) { document.getElementById("result").innerHTML = "输入一个有效的整数(1到100之间)"; return; } guessCount++; if (guess === targetNumber) { document.getElementById("result").innerHTML = "恭喜你,猜对了!你用了" + guessCount + "次猜中了数字" + targetNumber; } else if (guess < targetNumber) { document.getElementById("result").innerHTML = "猜小了,再试一次"; } else { document.getElementById("result").innerHTML = "猜大了,再试一次"; } } </script> </body> </html> ``` 你可以将上述代码保存为一个HTML文件,然后在HBuilderX中打开该文件,点击运行按钮即可在浏览器中运行猜数字游戏。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值