本机测这些数据明明是过的,但是提交上去就差了一大截,为什么啊qwq
是我代码里面有 UB 吗qwq
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <iostream>
#define ll long long
#define ull unsigned long long
#define _for(i, a, b) for(int (i) = (a); (i) <= (b); ++(i))
#define _rep(i, a, b) for(int (i) = (a); (i) >= (b); --(i))
#define _spfor(i, a, b, c) for(int (i) = (a); (i) <= (b); (i) += (c))
#define _sprep(i, a, b, c) for(int (i) = (a); (i) >= (b); (i) -= (c))
#define _forll(i, a, b) for(ll (i) = (a); (i) <= (b); ++(i))
#define _repll(i, a, b) for(ll (i) = (a); (i) >= (b); --(i))
#define _spforll(i, a, b, c) for(ll (i) = (a); (i) <= (b); (i) += (c))
#define _sprepll(i, a, b, c) for(ll (i) = (a); (i) >= (b); (i) -= (c))
using namespace std;
inline void getint(int& x) {
int f = 1; x = 0;
char c = getchar();
while(!isdigit(c)) {if(c == '-') f = -1; c = getchar();}
while(isdigit(c)) {x = x * 10 + c - '0'; c = getchar();}
x *= f;
}
inline void getll(ll &x) {
ll f = 1; x = 0;
char c = getchar();
while(!isdigit(c)) {if(c == '-') f = -1; c = getchar();}
while(isdigit(c)) {x = x * 10 + c - '0'; c = getchar();}
x *= f;
}
inline void writeint(int& x) {
if(!x) {printf("0"); return;}
else if(x < 0) printf("-");
int tmp = x < 0 ? -x : x, digit[17] = {0};
while(tmp) {digit[++digit[0]] = tmp % 10; tmp /= 10;}
_rep(i, digit[0], 1) printf("%d", digit[i]);
}
inline void writell(ll& x) {
if(!x) {printf("0"); return;}
else if(x < 0) printf("-");
ll tmp = x < 0 ? -x : x; int digit[27] = {0};
while(tmp) {digit[++digit[0]] = tmp % 10; tmp /= 10;}
_rep(i, digit[0], 1) printf("%d", digit[i]);
}
ll ans;
int n, m;
ll digitnum(ll x) {
ll p = x, ans = 0;
while(p) {
ans++;
p /= 10;
}
return ans;
}
ll turn(ll x) {
ll p = x, ans = 0, digit[27] = {0};
while(p) {
digit[++digit[0]] = p % 10;
p /= 10;
}
_forll(i, 1, digit[0]) ans += digit[i] * (ll)pow(10, digit[0] - i);
return ans;
}
int main() {
//This program is written in Windows 10 by Eason_AC
getint(n), getint(m);
_for(i, 1, n) {
int len = digitnum(i), rev = turn(i);
ll tmp = ((ll)pow(10, len) * i + rev) % m;
ans = (ans + tmp % m) % m;
}
writell(ans);
return 0;
}