codeforces global round 13 D

该代码实现了一个检查两个整数u和v相加时是否满足位计数性质的函数。如果u小于v或者在将u和v进行二进制右移并计数1的个数过程中,v的1的个数始终不小于u,则返回true。这个函数可能用于验证特定的数学或计算机科学问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由U&V==V方有U到U+V的一条有向边知,U+V必定由U进位而来,且U+V的二进制中1的个数必然小于等于U;则可以很简单判断
/*

  • @Author: your name
  • @Date: 2021-03-08 20:21:54
  • @LastEditTime: 2021-03-08 20:27:27
  • @LastEditors: Please set LastEditors
  • @Description: In User Settings Edit
  • @FilePath: \code_formal\cf\GR_13_4.cpp
    /
    /
  • @Author: your name
  • @Date: 2021-03-05 12:37:52
  • @LastEditTime: 2021-03-05 12:38:39
  • @LastEditors: Please set LastEditors
  • @Description: In User Settings Edit
  • @FilePath: \code_formal\course\algrom\01_2.cpp
    */
    #include
    #include
    #include
    #include <string.h>
    #include
    #include
    #include
    typedef long long int ll;

using namespace std;

bool check(int u, int v)
{
if (u > v)
return false;
int cnt_u = 0, cnt_v = 0;
while (u | v)
{
cnt_u += (u & 1 ? 1 : 0);
cnt_v += (v & 1 ? 1 : 0);
u >>=1,v>>=1;
if(cnt_v > cnt_u)
return false;
}
return true;
}

int main()
{
int k;
cin >> k;
string s;
while (k–)
{
int u, v;
cin >> u >> v;
cout << (check(u, v) ? “YES” : “NO”) << endl;
}

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值