SCU 4120 G: Guess The Earliest Time

来源:互联网 发布:淘宝服装质量问题范围 编辑:程序博客网 时间:2024/06/01 10:38

链接:http://cstest.scu.edu.cn/soj/problem.action?id=4120


题目大意:定义一个数集的价值是:数集中满足以下要求的数对的个数

      x,y  (x&y)==min(x,y)

现在给你一个N,N保证是2的T次方 且 1<T<23

你要求出,一个含有1-N N个数的数集,去掉其中的几个数,能使数集的价值变成0?


TAG:数学


当初刚看这一题的时候完全木了。。就在各种猜方法。。。然后各种WA。。。

首先那个公式的意义就是。。

两个二进制数。。

大的那一个,在小的那一个为1的位上不能全是1= =【好难表述。。

然后我想出了一个N=16的时候的答案。。可以只用去掉9个。。剩下的是

10000

  1100

  1010

  1001

    110

    101

      11

从这个就可以看出一些端倪。。

首先最大的肯定是可以留下的。。因为开头的1下面都没有。。后面又全是0

然后后面的4个0,我要往里面填1,然后填的1不重复。。而且这里填的1的个数全部一样是最优的【忘记怎么证明了额。。。

4个格子,肯定是填2个1的方法最多。。

即C(4,2)=6

加上上面的一个。。就是7个。。

答案就是N-C(k,2*k)-1

k要自己算出来。。C就预处理一下就行了。。

所以程序还是很短的。。


代码如下:

#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;int c[30][30]={0};void init(){    c[0][0]=1;    for(int i=1;i<30;i++)    {       c[i][0]=1;       c[i][i]=1;    }    for(int i=2;i<30;i++)      for(int j=1;j<i;j++)         c[i][j]=c[i-1][j]+c[i-1][j-1];}main(){  //   freopen("in.txt","r",stdin);  //   freopen("out.txt","w",stdout);     int t;     scanf("%d",&t);     init();     while(t--)     {        int n;        scanf("%d",&n);        int count=0;        int tt=n;        while((n&1)==0)        {           count++;           n/=2;        }        printf("%d\n",tt-c[count][count/2]-1);     }     return 0;}

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 两岁x型腿怎么办 绿萝叶子有水滴怎么办 打游戏变菜了怎么办 车被记号笔画了怎么办 水溶性彩铅受潮了怎么办 马克笔颜色涂深了怎么办 染发膏染眉毛了怎么办 用电容笔画画手有触感怎么办 CAD画图线性数字不居中怎么办 3d立体画笔堵塞怎么办 龋齿树脂填充老化后怎么办 小孩补过的牙疼怎么办 颜料弄到墙纸上怎么办 4岁的宝宝不爱涂色怎么办 oppo手机截图存不到相册怎么办 做的ih5保存不了怎么办 小偷偷东西发现后逃跑了怎么办? 网上有人传迷信诅咒怎么办 颜料粘在衣服上怎么办 家里有小偷撬锁怎么办 在家有人在撬门怎么办 6个月的宝宝腹泻怎么办 六个月大的宝宝拉肚子怎么办 六个月宝宝着凉拉肚子怎么办 六个月婴儿着凉拉肚子怎么办 怀孕六个月着凉拉肚子怎么办 六个月的婴儿消化不好怎么办 六个月婴儿不好好吃奶怎么办 六个月婴儿消化不好怎么办 六个月婴儿肠胃不好怎么办 受了惊吓后睡眠不好怎么办 宝宝夏季吃饭不爱带围嘴怎么办 3岁宝宝爱看电视怎么办 新生儿晚上哭闹不睡觉怎么办 档案丢了怎么办失业证 三岁宝宝不合群怎么办 阴唇手术半月了疤痕增生怎么办 宝宝小阴唇黏连怎么办 6个月宝宝阴唇粘连怎么办? 高一孩子不爱上学怎么办 3岁宝宝外阴发红怎么办