训练赛第一场

ouyu69 发布于 2024-10-12 157 次阅读


大黄猫要成为大作家


先统计字符串s1中每一种类的字母的数量放在数组a中,然后统计字符串s2中每一种类的字母的数量放在数组b中,然后检查是否b中存在的每一种字母的数量都小于等于a中对应字母的数量,如果符合就输出"YES"否则输出"NO"。

统计每一种字母的数量可以用字母的ASCII码当作数组的下标来进行统计。

#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)
#define endl '\n'
#define int long long
#define PII pair<int, int> 
#define _rep(i,a,b) for( int i=(a); i<=(b); ++i)
#define _per(i,a,b) for( int i=(a); i>=(b); --i)
using namespace std;
const int N = 1e6+10 ;
const int INF = 0x3f3f3f3f3f3f3f3f;
const int MOD = 1e9 + 7  ;
const double eps = 1e-9 ;
int gcd(int a, int b){ return b == 0 ? a : gcd(b, a%b); }
int lcm(int a, int b){ return a * b / gcd(a,b); } 
int qmi(int a, int b){
    int res = 1 ;
    while(b){
        if(b&1) res = a * res % MOD ;
        b >>= 1 ;
        a = a * a % MOD ;
    }
    return res ;
}
int T = 1 ;
int ans = 0 ;
int n , m, k, q ;
string s1 , s2 ;
int a[N] ;
int b[N] ;
void solve(){
    cin >> n >> m ;
    cin >> s1 ;
    cin >> s2 ;
    for(int i = 0 ; i < n ; ++ i){
        a[(s1[i]-'a')] ++ ;
    }
    for(int i = 0 ; i < m ; ++ i){
        b[(s2[i]-'a')] ++ ;
    }
    for(int i = 0 ; i < 26 ; ++ i){
        if(a[i] < b[i]){
            cout << "NO" << endl ;
            return ;
        }
    }
    cout << "YES" << endl ;
}
signed main(){
    IOS ;
    // cin >> T ;
    while(T --){
        solve() ;
    }
    return 0;
}

大黄猫学简单加法


记得开long long 数据会爆int

void solve() {
    long long n, m;
    cin >> n >> m;

    vector<long long>a(n + 1);
    if (n < m) {
        cout << 0 << endl;//特判n<m的情况
    }
    else {
        for (int i = 1; i <= n; i++) {
            cin >> a[i];
            a[i] += a[i - 1];//前缀和模板
        }
        long long sum = 0;
        for (int i = m; i <= n; i++) {
            sum += a[i] - a[i - m];//从m开始遍历,得到前(i-m+1)~i段值和
        }
        cout << sum << endl;
    }

}
我打算法竞赛,真的假的。
最后更新于 2024-10-12