ABC220

发布时间:2022-07-02 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了ABC220脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

C

题意:给你一个长为N的序列A,并由他构成一个无限长的序列AAAAA....(至少对于输入数据是这样的),问你在这个无限长的序列中,前多少个数字的和会超过X

#include <iostream>
using namespace std;

const int N = 100010;

#define int long long

int n, x;
int a[N];

signed main(){
    cin >> n;
    int sum = 0;
    for(int i = 0; i < n; i ++){
        cin >> a[i];
        sum += a[i];
    }
    
    cin >> x;
    
    int p = x % sum, q = (x / sum) * n;
    
    int t = 0;
    for(int i = 0; i < n; i ++){
        t += a[i];
        if(t <= p) q ++;
    }
    
    q ++;
    
    cout << q << endl;
}

D

题意:给你一个整数序列(A=(A_1,…,A_N),A_iin{0,1,...,9}),定义两种操作F和G

F操作:将序列最左边的两个数字a, b合并成(a + b) % 10

G操作:将序列最左边的两个数字a, b合并成(a * b) % 10

最终序列剩下一个数字t的时候,问分别有多少种FG操作组合能够让t为0,...,9

方法:dp

状态:(f(i, j)),表示第i次操作后,所获得的数字为j的FG操作组合的数目

状态计算:

[f(i, (p + i) % 10) = f(i, (p + i) % 10) + f(i, p)\ f(i, (p * i) % 10) = f(i, (p * i) % 10) + f(i, p)\ ]

初始条件:(f(0, A[0]) = 1)

#include<iostream>
using namespace std;

const int N = 100010, mod = 998244353;

int f[N][10];
int n, a[N];

int main(){
    cin >> n;
    
    for(int i = 0; i < n; i ++) cin >> a[i];
    
    f[0][a[0]] = 1;
    
    for(int i = 1; i < n; i ++){
        for(int j = 0; j <= 9; j ++){
            int &p = f[i][(a[i] + j) % 10];
            int &q = f[i][(a[i] * j) % 10];
            p = (p + f[i - 1][j]) % mod;
            q = (q + f[i - 1][j]) % mod;
        }
    }
    
    for(int i = 0; i <= 9; i ++) cout << f[n - 1][i] << endl;
    
    return 0;
}

脚本宝典总结

以上是脚本宝典为你收集整理的ABC220全部内容,希望文章能够帮你解决ABC220所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: