Codeforces Round #785 (Div. 2) A-D

A - Subtle Substring Subtraction

思路:贪心

代码:

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define x first
#define y second
typedef pair<int,int>PII;
const int N = 2e5 + 10;
int a[N], b[N]; 
void solve() {
	string s;
	cin >> s;
	int a = 0, b = 0;
	int length = s.size();
	if(length % 2 == 0) {
		for(int i = 0; i < length; i++) {
			a += s[i] - 'a' + 1;
		}
		cout << "Alice" << ' ' << a << endl;
	} else {
		if(s[0] < s[length - 1]) {
			for(int i = 1; i < length; i++) a += s[i] - 'a' + 1;
			b += s[0] - 'a' + 1;
			if(a > b) cout << "Alice" << ' ' << a - b << endl;
			else if(a < b) cout << "Bob" << ' ' << b - a << endl;
		} else {
			for(int i = 0; i < length - 1; i++) a += s[i] - 'a' + 1;
			b += s[length - 1] - 'a' + 1;
			if(a > b) cout << "Alice" << ' ' << a - b << endl;
			else if(a < b) cout << "Bob" << ' ' << b - a << endl; 
		}
	}
}	
signed main() {
	int t;
	cin >> t;
	while(t--) {
		solve();
	}
	return 0;
} 

B - A Perfectly Balanced String?

代码:

方法一:

#include <bits/stdc++.h>
using namespace std;
#define int long long
int cnt[26];
int n;
string s;
bool check(int x) {
	static int c[26];
	for(int i = 0; i < n; i++) {
		if(s[i] - 'a' == x) continue;
		int j = i;
		memset(c, 0, sizeof c);
		c[s[i] - 'a']++;
		while(j + 1 < n && s[j + 1] - 'a' != x) {
			j++;
			if(++c[s[j] - 'a'] > 1) return false;
		}
	}
	return true;
}
void solve() {
	cin >> s;
	memset(cnt, 0, sizeof cnt);
	n = s.size();
	for(int i = 0; i < n; i++) {
		cnt[s[i] - 'a']++;
	}
	for(int i = 0; i < 26; i++) {
		if(cnt[i]) {
			if(!check(i)) {
				cout << "NO" << endl;
				return;
			}
		}
	}
	cout << "YES" << endl;
}
signed main() {
	int t;
	cin >> t;
	while(t--) {
		solve();
	}
	return 0;
}

方法二:

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define x first
#define y second
typedef pair<int,int>PII;
const int N = 2e5 + 10;
int a[N], b[N]; 
bool st[26];
int cnt[26];
void solve() {
	memset(st, 0, sizeof st);
	memset(cnt, 0, sizeof cnt);
	string s;
	cin >> s;
	string temp;
	temp.clear();
	int length = s.size();
	int kind = 0;
	for(int i = 0; i < length; i++) {
		if(!st[s[i] - 'a']) {
			kind ++;
			st[s[i] - 'a'] = 1;
		}
	}
	int pos = length - 1;
	memset(st, 0, sizeof st);
	for(int i = 1; i < length; i++) {
		if(s[i] == s[0]) {
			pos = i - 1;
			break;
		}else {
			if(!st[s[i] - 'a']) {
				st[s[i] - 'a'] = 1;
			}else {
				cout << "NO" << endl;
				return;
			}
		}
	}
	if(pos == length - 1)  {
		cout << "YES" << endl;
		return;
	}
	else for(int i = 0; i <= pos; i++) temp += s[i];
	int k = 0;
//	cout << temp << "**" << endl;
	int l = temp.size();
	for(int i = pos + 1; i < length; ) {
		while(s[i] == temp[k] && k < l) {
			i++, k++;
		}
		if(k != l) {
			if(i != length) {
				cout << "NO" << endl;
				return;
			}
		}
		k = 0;
	}
	cout << "YES" << endl;
	return;
}	
signed main() {
	int t;
	cin >> t;
	while(t--) {
		solve();
	}
	return 0;
} 

C - Palindrome Basis

代码:


#include <bits/stdc++.h>
using namespace std;
#define int long long
#define x first
#define y second
typedef pair<int,int>PII;
const int N = 2e5 + 10, mod = 1e9 + 7;
int w[N];
int f[N];
int k = 0;
bool check(int x) {
	int t = 0, tt = x;
	while(tt) {
		t = t * 10 + tt % 10;
		tt /= 10;
	}
	if(x == t) return true;
	return false;
}
void solve() {
	int x;
	cin >> x;
	cout << f[x] % mod << endl;
}	
signed main() {
	int t;
	cin >> t;
	for(int i = 1; i <= 40000; i++) {
		if(check(i)) {
			w[++k] = i;
		}
	}
	f[0] = 1;
	for(int i = 1; i <= k; i++) {
		for(int j = w[i]; j <= 40000; j++) {
			f[j] = (f[j-w[i]] + f[j]) % mod; 
		}
	}
	while(t--) {
		solve();
	}
	return 0;
}

D. Lost Arithmetic Progression

看大佬的代码:
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long LL;
const int mod = 1e9 + 7;

int main(){
    cin.tie(0);
    cout.tie(0);
    ios::sync_with_stdio(0);

    int T;
    cin >> T;
    while(T--){
        LL b, c, q, r, y, z;
        cin >> b >> q >> y >> c >> r >> z;
        if (r % q || (c - b) % q || c < b || c + (z - 1) * r > b + (y - 1) * q){
            cout << 0 << '\n';
            continue;
        }
        if (c - r < b || c + z * r > b + (y - 1) * q){
            cout << -1 << '\n';
            continue;
        }
        LL res = 0;
        for(LL i = 1; i * i <= r; i++){
            if (r % i == 0){
                if (i * q / __gcd(i, q) == r)
                    res = (res + r / i * r / i) % mod;
                if (i * i != r){
                    LL t = r / i;
                    if (t * q / __gcd(t, q) == r)
                        res = (res + r / t * r / t) % mod;
                }
            }
        }
        cout << res << '\n';
    }
}
posted @ 2022-05-01 15:37  飘向远方丶  阅读(20)  评论(0)    收藏  举报