E - Arithmetic Number
题意:
定义一种满意数:把这个数的每一位拆出来,可以形成公差为
d
(
0
<
=
d
<
=
9
)
d \ (0<=d<=9)
d (0<=d<=9) 的等差数列
给出一个数
n
n
n,找出不小于
n
n
n 的第一个满意数
思路:
暴力预处理所有的满意数插入
s
e
t
set
set 或者
m
a
p
map
map,二分查找即可
code:
#include<bits/stdc++.h>
#define endl '\n'
#define ll long long
#define ull unsigned long long
#define ld long double
#define all(x) x.begin(), x.end()
#define eps 1e-6
using namespace std;
const int maxn = 2e5 + 9;
const int mod = 1e9 + 7;
const int inf = 0x3f3f3f3f;
const ll INF = 0x3f3f3f3f3f3f3f3f;
ll n, m;
set<ll> se;
void f(int x, int d){
ll sum = 0;
while(x >= 0 && x <= 9){
sum += x;
se.insert(sum);
x += d;
sum *= 10;
if(sum > (ll)(2e17)) break;
}
}
void work()
{
for(int i = 1; i <= 9; ++i)
for(int d = 0; d <= 9; ++d)
f(i, d), f(i, -d);
cin >> n;
cout << *se.lower_bound(n);
}
int main()
{
ios::sync_with_stdio(0);
// int TT;cin>>TT;while(TT--)
work();
return 0;
}