暴力C
#include <iostream>
using namespace std;
#define int long long
typedef unsigned long long ull;
#define js \
ios::sync_with_stdio(false); \
cin.tie(nullptr)
int getl(int x)//求位数
{
if (x == 0)
return 1;
int i = 0;
while (x) {
i++;
x /= 10;
}
return i;
}
int e[7] = {0, 10, (int)1e2, (int)1e3, (int)1e4, (int)1e5, (int)1e6};
signed main()
{
js;
int n, c;
cin >> n >> c;
int cl = getl(c);
int l = n - cl - 2;
if (cl < (l + 1) / 2 || cl > l) {
cout << '0';
return 0;
}
int ans = 0, al, bl;
al = cl;
bl = l - al;
for (int a = c; a >= e[cl - 1]; a--) {
if (getl(c - a) == bl) {
ans++;
if (al != bl)//颠倒A、B的位置
ans++;
}
}
al = cl - 1;
bl = l - al;
if (al >= bl) {
for (int a = e[al] - 1; a >= e[al - 1]; a--) {
if (getl(c - a) == bl) {
ans++;
if (al != bl)
ans++;
}
}
}
cout << ans;
return 0;
}
贪心E
#include <iostream>
using namespace std;
#define int long long
typedef unsigned long long ull;
#define js \
ios::sync_with_stdio(false); \
cin.tie(0)
const int N = 1e6 + 5;
int getl(int x)
{
int res = 0;
while (x) {
res++;
x /= 10;
}
return res;
}
int a[20], b[20];
signed main()
{
js;
int n;
cin >> n;
int l1, r1, l2, r2;
while (n--) {
cin >> l1 >> r1 >> l2 >> r2;
int smax = r1 + r2, smin = l1 + l2;
smax += 1;//这一步可以简化5999999···类似情况变成普遍情况来处理
int lmax = getl(smax), lmin = getl(smin);
int ans = 0;
for (int i = 1; i < 20; i++) {
a[i] = smax % 10;
b[i] = smin % 10;
smax /= 10;
smin /= 10;
}
for (int i = 19; i > 0; i--) {
if (a[i] == b[i])
ans += a[i];
else {
ans += a[i] - 1;//我贪
ans += (i - 1) * 9;
break;
}
}
cout << ans << "\n";
}
return 0;
}