有n个瓶子,里面都有一升水,但是只想保留k个瓶子,只能两个瓶子里面的水体积相等时才能倒在一个瓶子里;不能丢弃有水的瓶子;瓶子容量无限;

问需要购买几个额外的瓶子才能满足条件;

因为每个瓶子一开始只有一升水,那么合并后每个瓶子里面的水体积都是2i,也就是说,n个瓶子最少能合并成n的二进制数中1的个数个瓶子;

那么我们要买多少个瓶子呢?面对一个二进制数,我们因为要让他的1的个数变小,我们要加上lowbit (x&(-x)),这个表示的是保留这个数从右边起第一个1的位置,

比如:100010 lowbit是10

111111110                     10

111111111                        1

1000001000                  1000;

这样我们就可以进位,而且1的个数不会增多,当有连续的1时,我们的1的个数就降了下来,等到<=k时退出循环即可;

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,k;
int ans;
int work(int x)
{
int num=;
for(;x;x-=x&(-x)) num++;
return num;
}
int main()
{
scanf("%d%d",&n,&k);
while(work(n)>k)
{
ans+=n&(-n);
n+=n&(-n);
}
printf("%d",ans);
return ;
}

P2158 [SDOI2008]仪仗队

方阵中,你在左下角,求看不见的人数;

可以知道我们只能看到横纵坐标gcd等于1(互质)的,当然(2,2)要特判;

我们只需要求右下角的三角形,然后*2+1就好了。(加1是(2,2));

根据坐标,求(x,y)比y小的数中有几个和y互质

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=;
int n;
int p[maxn];
int ans;
int main()
{
scanf("%d",&n);
if(n==)
{
printf("");
return ;
}
for(int i=;i<=n;i++)
{
p[i]=i;
}
for(int i=;i<=n;i++)
{
if(p[i]==i)
{
for(int j=i;j<=n;j+=i)
{
p[j]=p[j]*(i-)/i;//欧拉函数
}
}
}
for(int i=;i<n;i++) ans+=p[i];
printf("%d",ans*+);
return ;
}

最新文章

  1. htmlentities,html_entity_decode,addslashes
  2. Spring Boot项目使用Flyway
  3. 从idea上通过路径去导入项目
  4. UItableview里面的header、footer
  5. 深入浅出ES6(十七):展望未来
  6. Connection failed: NT_STATUS_ACCOUNT_RESTRICTION
  7. RMAN备份失败之:mount: block device /dev/emcpowerc1 is write-protected, mounting read-only
  8. 轻松搭建自己的Linux发行版本
  9. DAY TRADER
  10. Filter及FilterChain的使用具体解释
  11. Joomla3.1.1在64位win7下安装
  12. Starting MySQL.. ERROR! The server quit without updating PID file (/usr/local/mysql/var/AYXXXXXXXXXXX.pid). 错误解决方法
  13. memcached 第二篇----安装使用
  14. 解决ionic在Android和iOS的一些样式上的冲突
  15. spring加载异常
  16. 笔记(json)实现前后端交互案例
  17. Swift 4 经典数据结构 Data Struct大全
  18. laravel5集成支付宝alipay扫码支付流程(Laravel 支付解决方案)
  19. 洛谷P1108 低价购买题解
  20. 查看open office运行状态

热门文章

  1. Mysql分表和分区的区别、分库和分表区别
  2. 使用ef core自动生成mysql表和数据编码的问题
  3. xcode 更改svn地址
  4. Docker多阶段构建实战(multi-stage builds)
  5. SuperMemo method
  6. Codeforces 853B Jury Meeting
  7. RAM disk
  8. No result defined for action com.java.test.Action.HelloAction and result index
  9. Ubuntu系统---安装“搜狗拼音法”导致桌面打不开
  10. Seafile和Nextcloud相比较哪个好用