您的位置:首页 > 其它

ABBYY Cup 3.0 - Finals (online version)

2014-02-21 22:28 288 查看
A 开个数组记录一下

#include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stdlib.h>
#include<cmath>
#include<vector>
#include<queue>
using namespace std;
#define LL long long
#define N 1000000
#define INF 0xfffffff
int dp[11][N+10];
int o[11][N+10];
int main()
{
int i,j;
LL n;
for(i = 0 ;i <= 9 ; i++)
{
dp[i][0] = 0;
}
for(i = 0; i <= 9;  i++)
for(j = 1; j <= N ;j++)
{
int mm = i;
int k = j;
while(k)
{
int x = k%10;
mm = max(mm,x);
k/=10;
}
if(mm>=j)
{
dp[i][j] = dp[i][0]+1;
o[i][j] = j-mm;
}
else
{
dp[i][j] = dp[i][j-mm]+1;
o[i][j] = o[i][j-mm];
}
}
while(cin>>n)
{
if(n<=N)
{
cout<<dp[0]
<<endl;
continue;
}
LL m = n%N,nm = n/N;
LL s = 0;
int k = 0;
for(i = nm ; i >= 0; i--)
{
int y = i,ma = 0;
while(y)
{
int x = y%10;
y/=10;
ma = max(ma,x);
}
if(i!=nm) m = N+k;
s += dp[ma][m];
k = o[ma][m];
if(k==0&&i!=0)
{
s++;
k = -ma;
}
}
cout<<s<<endl;
}
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: