思路:贪心
代码:
#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;
}
代码:
方法一:
#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;
}
代码:
#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;
}
看大佬的代码:
#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';
}
}