我吐了,是我的代码有问题吗,为什么
查看原帖
我吐了,是我的代码有问题吗,为什么
112917
Eason_AC楼主2020/10/20 16:46

本机测这些数据明明是过的,但是提交上去就差了一大截,为什么啊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;
}
2020/10/20 16:46
加载中...