大黄猫要成为大作家
先统计字符串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;
}
}
Comments NOTHING