牛客小白月赛93

B交换数字

题目:

思路:我们可以知道,a*b% mod = (a%mod) * (b%mod)

代码:

void solve(){
    int n;
    cin >> n;
    string a, b;
    cin >> a >> b;
    for(int i = 0;i < n;i ++)
        if(a[i] > b[i])
            swap(a[i], b[i]);
    int num1 = 0, num2 = 0;
    for(int i = 0;i < n;i ++){
        num1 = (num1 * 10 + (a[i] - '0')) % mod;
        num2 = (num2 * 10 + (b[i] - '0')) % mod;
    }
    cout << num1 * num2 % mod;
}

C老虎机

题目:

思路:我们可以算出总共的方案为m * m * m,然后三个图相同的方案为m,三个图都不相同的方案为m * (m - 1) * (m - 2)。然后按照要求求即可。

代码:

const int mod = 998244353;
 
int qmi(int a, int k, int p)
{
    __int128 res = 1;
    while (k)
    {
        if (k & 1)res = (__int128)res * a % p;
        k >>= 1;
        a = (__int128)a * a % p;
    }
    return res;
}
 
void solve(){
    int m, a, b, c;
    cin >> m >> a >> b >> c;
    int mu = m * m * m;
    int ans1 = m * (m - 1) * (m - 2) % mod, ans3 = m;
    int ans2 = (mu - ans1 - ans3) % mod;
    int u = (qmi(mu, mod - 2, mod) + mod) % mod;
    cout << ((((a * ans1 + b * ans2 + c * ans3) % mod) * u ) % mod + mod) % mod << endl;
}

D幻兽帕鲁

题目:

思路:我们可以想出,如果站在[mid+1,r]中,那么是当前位为奇数,在[l,mid]为偶数,那么我们可以正着操作输入的x,如果但前x大于mid,那么答案当前位位1,否则为0.

代码:

void solve(){
    read(n);read(m);
    ll up = (1LL << n);
    rep(ss,1,m){
        ll x,y = up;
        read(x);
        x++;
        ll ans = 0;
        ll sum = 0;
        rep(i,0,n - 1){
            y /= 2;
            if(x > y){
                ans |= (1LL << i);
                x -= y;
            }else{
                 
            }
        }
        printf("%lld\n",ans);
    }
}

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

临江浪怀柔ℳ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值