ural 1289. One Way Ticket

时间:2023-03-10 02:34:25
ural 1289. One Way Ticket

1289. One Way Ticket

Time limit: 1.0 second
Memory limit: 64 MB
A crowed of volunteers dressed in the star striped overalls have filled the starport. There starcraft leaves to the thorium mines of Haron. Their job will be hard and dangerous. Will many of them return home?
This question has an exact answer. Each of the volunteers has a ticket to the starcraft. There signed a compartment number where he is to fly. The starcraft is not passenger, it departs to Haron once a month full of the volunteers and returns back loaded with thorium. This precious metal can be loaded not in all of the compartments. In such a compartments volunteers can return home. All the others are to stay at Haron... Forever.
The compartments are numbered. The numbers of the unfit compartments (and only their numbers) are so that the digit root of the first half of the number equals to the digit root of the second half. To calculate the digit root of a number one is to summarize the digits of the number; if the result is greater or equal than 10, then the digits of the result are to be summarized again; and so on until one gets a number from 0 to 9.
How many volunteers will return home?

Input

Even integer number N ≤ 200000 – an amount of digits used to number the compartments. There are exactly 10N compartments numbered from 0 to 10N-1 with the leading zeros.

Output

The number of compartments free of thorium on the way home.

Sample

input output
2
10
Problem Author: Leonid Volkov
Problem Source: USU Personal Contest 2004
Difficulty: 391
题意:问前一半的数字根和后一半数字的数字根相同的n位数有多少(可以有前缀零)
分析:首先,数字根为零的话显然只能是00....000这样全部是零
然后其他数字根肯定是1-9
令m=n/2(n必为偶数)
前m位共有设为k=10^m-1=99...999(m个9)个数,显然,每个数字根1111...111(m个1)=k/9个数
同样的,后m位共有k个数,显然,每个数字根k/9个数
然后就很显然了。。。
答案就是Ans = k * (k / 9) + 1
写下高精度就好
但是,999...999 * 111..111是有规律的。。。而且很容易找。。
所以高精度都不用写了。。。
 #include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <deque>
#include <vector>
#include <queue>
#include <iostream>
#include <algorithm>
#include <map>
#include <set>
#include <ctime>
using namespace std;
typedef long long LL;
typedef double DB;
#define For(i, s, t) for(int i = (s); i <= (t); i++)
#define Ford(i, s, t) for(int i = (s); i >= (t); i--)
#define Rep(i, t) for(int i = (0); i < (t); i++)
#define Repn(i, t) for(int i = ((t)-1); i >= (0); i--)
#define rep(i, x, t) for(int i = (x); i < (t); i++)
#define MIT (2147483647)
#define INF (1000000001)
#define MLL (1000000000000000001LL)
#define sz(x) ((int) (x).size())
#define clr(x, y) memset(x, y, sizeof(x))
#define puf push_front
#define pub push_back
#define pof pop_front
#define pob pop_back
#define ft first
#define sd second
#define mk make_pair
inline void SetIO(string Name) {
string Input = Name+".in",
Output = Name+".out";
freopen(Input.c_str(), "r", stdin),
freopen(Output.c_str(), "w", stdout);
} inline int Getint() {
int Ret = ;
char Ch = ' ';
bool Flag = ;
while(!(Ch >= '' && Ch <= '')) {
if(Ch == '-') Flag ^= ;
Ch = getchar();
}
while(Ch >= '' && Ch <= '') {
Ret = Ret*+Ch-'';
Ch = getchar();
}
return Flag ? -Ret : Ret;
} int n; inline void Input() {
cin>>n;
} inline void Solve() {
n /= ;
if(n == ) puts("");
else {
For(i, , n-) printf("");
printf("");
For(i, , n-) printf("");
printf("");
}
} int main() {
#ifndef ONLINE_JUDGE
SetIO("G");
#endif
Input();
Solve();
return ;
}