前缀和
这个题目巨妙,打的时候没写出来,后面补题发现太牛了
思路:当前区间左端点 L L L ,当我们向右移动一次,就相当于,原式 - f ( L ) + f ( L + 1 e 18 ) f(L) + f(L + 1e18) f(L)+f(L+1e18),值就等于原式 + 1;所以左端点移动一次就是 + 1,同时再把1e18 的值算出来,构造 1 999……8,2 999……7等,可以得出,等于81 * 1e18。
#include<iostream>
#include<string.h>
#include<cstring>
#include<unordered_map>
#include<iomanip>
#include<vector>
#include<algorithm>
#include<math.h>
#include<map>
#include<set>
#include<queue>
#define int long long
#define fi first
#define se second
#define pb push_back
#define bpt __builtin_popcountll
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> PII;
const int N = 2e5 + 10, mod = 998244353;
const int INF = 0x3f3f3f3f;
ll gcd(ll a, ll b) { return b ? gcd(b, a % b) : a; }
vector<int> g[N];
void solve() {
int n = 1e18;
int a; cin >> a;
int ans = a - n % a * 81 % a;
cout << ans << endl;
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t;
t = 1;
//cin >> t;
while (t--) solve();
return 0;
}