hdu 4577 X-Boxes
2016-07-03 11:32
260 查看
这道题是数学题,数学渣表示只能打表找规律,以下为打的表:
1 2 4
3 6 12
5 10 20
7 14 28
8 16 32
9 18 36
11 22 44
13 26 52
15 30 60
17 34 68
19 38 76
21 42 84
23 46 92
24 48 96
25 50 100
27 54 108
29 58 116
31 62 124
33 66 132
35 70 140
37 74 148
39 78 156
40 80 160
41 82 164
43 86 172
45 90 180
47 94 188
49 98 196
......
我打了第一位最大100,k==3的表,很容易发现奇数全部出现,但是乱入的偶数是什么鬼(上面已用红字标明)。好吧,那我就把这些偶数全都提出来如下,最左边为提出来的偶数,除以8后得到一组神奇的数,这组数不就是原数列的第一位。可想而知这些偶数的集合除以一个常数后就变成了原问题,只不过规模变小了(因为除以一个常数),那么这个常数是什么呢,就是2^(k),哈哈是不是很神奇。
出现在其中的偶数 /8== ?
8 /8== 1
24 /8== 3
40 /8== 5
56 /8== 7
64 /8== 8
72 /8== 9
88 /8== 11
import java.util.*;
import java.io.BufferedInputStream;
import java.lang.*;
import java.math.*;
class Task{
void solve(){
Scanner in=new Scanner(new BufferedInputStream(System.in));
int t;
t=in.nextInt();
while(t-->0){
int k=3;
int [] a=new int[1000];
Arrays.fill(a, 0);
ArrayList<Integer> res=new ArrayList();
for(int i=1;i<100;i++){
if( a[i]==0 ){
if( (i&1)==0 )res.add(i);
for(int j=0;j<k;j++){
System.out.print( i*(1<<j) +" ");
a[ i*(1<<j) ]=1;
}
System.out.println();
}
}
System.out.println("出现在其中的偶数 /8== ?");
for( Integer i:res ){
System.out.println(i+" /8== "+i/8);
}
}
in.close();
}
}
public class Main {
public static void solve(){
Scanner in=new Scanner(new BufferedInputStream(System.in));
int t=in.nextInt();
while(t-->0){
BigInteger n=in.nextBigInteger();
int k=in.nextInt();
BigInteger tmp=BigInteger.valueOf(1<<(k-1));
BigInteger ans=BigInteger.ZERO;
while( n.compareTo(BigInteger.ZERO)==1 ){
ans=ans.add(n.divide(tmp).add(BigInteger.ONE).divide(BigInteger.valueOf(2)));
n=n.divide(tmp.multiply(BigInteger.valueOf(2)));
}
System.out.println(ans);
}
}
public static void main(String[] args) {
solve();
}
}
1 2 4
3 6 12
5 10 20
7 14 28
8 16 32
9 18 36
11 22 44
13 26 52
15 30 60
17 34 68
19 38 76
21 42 84
23 46 92
24 48 96
25 50 100
27 54 108
29 58 116
31 62 124
33 66 132
35 70 140
37 74 148
39 78 156
40 80 160
41 82 164
43 86 172
45 90 180
47 94 188
49 98 196
......
我打了第一位最大100,k==3的表,很容易发现奇数全部出现,但是乱入的偶数是什么鬼(上面已用红字标明)。好吧,那我就把这些偶数全都提出来如下,最左边为提出来的偶数,除以8后得到一组神奇的数,这组数不就是原数列的第一位。可想而知这些偶数的集合除以一个常数后就变成了原问题,只不过规模变小了(因为除以一个常数),那么这个常数是什么呢,就是2^(k),哈哈是不是很神奇。
出现在其中的偶数 /8== ?
8 /8== 1
24 /8== 3
40 /8== 5
56 /8== 7
64 /8== 8
72 /8== 9
88 /8== 11
import java.util.*;
import java.io.BufferedInputStream;
import java.lang.*;
import java.math.*;
class Task{
void solve(){
Scanner in=new Scanner(new BufferedInputStream(System.in));
int t;
t=in.nextInt();
while(t-->0){
int k=3;
int [] a=new int[1000];
Arrays.fill(a, 0);
ArrayList<Integer> res=new ArrayList();
for(int i=1;i<100;i++){
if( a[i]==0 ){
if( (i&1)==0 )res.add(i);
for(int j=0;j<k;j++){
System.out.print( i*(1<<j) +" ");
a[ i*(1<<j) ]=1;
}
System.out.println();
}
}
System.out.println("出现在其中的偶数 /8== ?");
for( Integer i:res ){
System.out.println(i+" /8== "+i/8);
}
}
in.close();
}
}
public class Main {
public static void solve(){
Scanner in=new Scanner(new BufferedInputStream(System.in));
int t=in.nextInt();
while(t-->0){
BigInteger n=in.nextBigInteger();
int k=in.nextInt();
BigInteger tmp=BigInteger.valueOf(1<<(k-1));
BigInteger ans=BigInteger.ZERO;
while( n.compareTo(BigInteger.ZERO)==1 ){
ans=ans.add(n.divide(tmp).add(BigInteger.ONE).divide(BigInteger.valueOf(2)));
n=n.divide(tmp.multiply(BigInteger.valueOf(2)));
}
System.out.println(ans);
}
}
public static void main(String[] args) {
solve();
}
}
相关文章推荐
- Mybatis--映射器注解
- java赋值步骤
- [2016/07/03] LeetCode / Java - Day 11 -
- Java遍历集合
- mybatis的一些配置
- ubuntu 16.04 ProxyChains4 编译安装
- javaEE学习笔记
- 【bzoj3698】【XWW的难题】【有上下界的网络流】
- Redmine插件开发帮助
- java—读取文件——空行
- 多重继承与void*指针转换问题的分析
- PHP获取IP地址的五种方法
- Boost serialization
- java-finally例子
- 关于JS的立即执行函数的一处使用场景
- html+css初步学习笔记(1)
- DataBinding的简单使用
- python bottle框架
- java-finally
- 数据结构复习 - 队列Queue