您的位置:首页 > 其它

sgu 108-self-numbers 2

2011-01-12 13:14 435 查看
sgu 对内存的限制比较大,才2M。这个题主要是用时间换空间。

/*
ID: mnlm1991
PROG: sgu 108 Self-numbers 2
LANG: C++
*/
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<vector>
#include<algorithm>
#include<string>
#include<map>
#include<set>
#include<bitset>
#include<queue>
#include<iostream>
using namespace std;
bool visited[64];
int N;
int K;
int a[5001];
struct DATA
{
int d;
int l;
bool operator < (const DATA & other) const
{
return d < other.d;
}
}s[5001];
const int MOD = 64;
int main()
{
while (scanf("%d%d", &N, &K) != EOF)
{
int i;
for (i = 0; i < K; i++)
{
scanf("%d", &s[i].d);
s[i].l = i;
}
sort(s, s + K);
int l = 0;
int j = 0;
memset(visited, 0, sizeof(visited));
for (i = 1; i <= N; i++)
{
if (visited[i % MOD])
{
visited[i % MOD] = false;
}
else
{
if (l == s[j].d - 1)
{
while (l == s[j].d - 1)
{
a[s[j++].l] = i;
}
}
l++;
}
int tmp = 0;
int j = i;
while (j)
{
tmp += j % 10;
j /= 10;
}
visited[(i + tmp)% MOD] = true;
}
printf("%d/n", l);
for (i = 0; i < K - 1; i++)
{
printf("%d ", a[i]);
}
printf("%d/n", a[i]);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: