POJ3725-I know the k-th integer
来源:互联网 发布:依存度算法 编辑:程序博客网 时间:2024/06/06 03:30
题目链接:http://poj.org/problem?id=3725
题意描述:就是对于n个数,按字典序排序,如果给出第k位的数字m,求出最小的n。题意分析:分两种情况判断,先判断n不存在的情况。如果当n=m时,m排在t位上,如果k<t,那么n不存在。还有如果m是10的几次方时,k=t时n才存在,一开始没有单独判断这种情况,结果WA了。然后判断n存在的情况下,如果从m++一位一位判断找,铁定会超时。这里有一个技巧,比方说第三组测试数据25吧,250前的数肯定在25前,2500前的数也肯定在25前,所以,你懂的、、
代码如下:
#include<stdio.h>
#include<string.h>
//#include<math.h>
__int64 wei( __int64 m ){
__int64 i, cnt = 0, mm = m;
while( mm ){
cnt ++;
mm /= 10;
}
//mm = pow( 10,cnt-1 );
mm = 1;
for( i=1; i<cnt; i++ )
mm *= 10;
return m - mm + 1;
}
__int64 Init( __int64 m ){
__int64 r = 0;
while( m ) {
r += wei( m );
m /= 10;
}
return r;
}
int check( __int64 m, __int64 k, __int64 cmp ){
__int64 cnt = 0;
__int64 mm = m;
while( mm != 1 ){
if( mm % 10 == 0 ){
cnt ++;
mm /= 10;
}
else
return 0;
}
if( k == cmp )
printf( "%I64d\n", m );
else
printf( "0\n" );
return 1;
}
void fac( __int64 n, __int64 k, __int64 t ){
__int64 m = n;
__int64 cnt, s, cmp;
while( k != t ){
cmp = t;
s = wei( m*10 ) -1 + t;
if( s < k ){
m = m*10;
t = s;
}
else{
__int64 mm = m;
cnt = 0;
while( mm ){
cnt ++;
mm /= 10;
}
//__int64 num = pow( 10, cnt );
__int64 i,num = 1;
for( i=1; i<=cnt; i++ )
num *= 10;
cnt = num + k - cmp - 1;
break;
}
}
printf( "%I64d\n", cnt );
}
int main(){
__int64 k,m;
while( scanf( "%I64d%I64d", &k, &m ) != EOF ){
__int64 cmp = Init( m );
if( cmp > k ){
printf( "0\n" );
continue;
}
if( check( m, k, cmp ) ){
continue;
}
fac( m, k, cmp );
}
return 0;
}
- POJ3725-I know the k-th integer
- poj 3725 I know the k-th integer(数学计算找规律)
- The DNS I know
- Given an 32-bit integer X, swap the i-th and j-th bit.
- Humor: I know the whole truth
- TJU 2870 The K-th City
- POJ 2985 The k-th Largest Group
- POJ2985 The k-th Largest Group
- Poj 2985 The k-th Largest Group
- POJ-2985-The k-th Largest Group
- POJ 2985 The k-th Largest Group
- TOJ:2870. The K-th City
- the k-th string JAVA版
- POJ2985 The k-th Largest Group
- dijstra算法 2870. The K-th City
- hdu 5102 The K-th Distance
- 【BestCoder】 HDOJ 5102 The K-th Distance
- 【HDU】5102 The K-th Distance bfs
- 最近练习的一些算法(持续更新)
- poj 1470(LCA RE)
- until cancel的意义和使用场景
- hdu1828poj1177线段树周长并
- Flex服务器swf 更新后,客户端不需要清空缓存即可查看最新版本
- POJ3725-I know the k-th integer
- K&R的名著:<C程序设计语言>小程序总结2
- Ubuntu下配置 Eclipse 编译、开发 Hadoop(MapReduce)源代码
- Android多媒体开发【6】-- 播放器的基本模型
- dwarf调试信息格式入门
- oracle常用命令
- Dragons
- while (scanf("%d",&n)!=EOF)
- 理解ThreadLocal