码迷,mamicode.com
首页 > 其他好文 > 详细

P4349 [CERC2015]Digit Division

时间:2020-09-18 03:28:13      阅读:18      评论:0      收藏:0      [点我收藏+]

标签:==   printf   pac   难度   com   决策   line   const   long   

P4349 CERC2015 Digit Division
思维提高,代码难度入门。
正解:快速幂。
考虑一个区间,如果模 \(M\) 等于0,那么就可以作为决策点,而决策点前后加合法段也是合法段。那么直接对于每一个前缀求一个模M的值,当值为0即可作为决策点。
判无解:如果最后一个区间(也就是末尾和最后一个决策点之间)模 \(M\) 不为0,那么就无解,因为无法将整个序列划分完整。
其他情况就是 2^(总决策点数-1)

#include <iostream>
#include <cstring>
#include <cstdio>

using namespace std;

typedef long long ll;
const ll MAXN = 1e6+10;
const ll MOD = 1e9+7;

ll N, M, sum, cnt;
char ss[MAXN];

int main() {
    scanf("%lld%lld", &N, &M);
    scanf("%s", ss+1);
    for (ll i = 1; i <= N; i++) {
        sum = sum * 10 + (ss[i] - ‘0‘);
        sum = sum % M;
        if (sum == 0) {
            cnt++;
        }
    }
    if (sum) return !puts("0");
    else {
        ll ans = 1;
        for (ll i = 1; i <= cnt-1; i++) {
            ans = (ans * 2) % MOD;
        }
        printf("%lld\n", ans);
    }
    return 0;
}

P4349 [CERC2015]Digit Division

标签:==   printf   pac   难度   com   决策   line   const   long   

原文地址:https://www.cnblogs.com/Gensokyo-Alice/p/13681314.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有 京ICP备13008772号-2
迷上了代码!