brz的杯子

brz的杯子

https://ac.nowcoder.com/acm/contest/8282/A

思维题

题目分析:x|y表示x整除y,也就是说x是y的因子,题目大意就是给你n个杯子,m个数(每个数都是无限多个的)你要填充满全部的杯子,因为1是任何比它大的数的因子,那么我们把第一个位置放1,后序所有素数的位置放2,因为题目说了保证下标如果y是x的因子,那么第x个杯子所放的数字一定大于第y个杯子的数,我们可以打表来看

位置:1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16
数字:1,2,2,3,2,3,2,4,3, 3, 2, 4, 2, 3, 3, 5

这样就一目了然了,观察1,2,4,8,16我们可以发现规律,发现每到下标为2的幂的位置,所需要的最大数都会加1,我们用二进制的思想来看,可以发现最大数其实就是二进制的位数。

AC代码

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <set>
#include <map>
#include <math.h>
#include <vector>
#include <queue>
#include <string.h>
typedef long long ll;
using namespace std;
#define pi acos(-1.0)
const int maxn = 1e5 + 10;
const int inf = 0x3f3f3f3f;
const int mod = 1e9 + 7;
int solve(int x)
{
    int ans = 0;
    while (x)
    {
        x >>= 1;
        ans++;
    }
    return ans;
}
int main()
{
    int t, ans = 0;
    scanf("%d", &t);
    for (int i = 1; i <= t; ++i)
    {
        int n, m;
        scanf("%d%d", &n, &m);
        if (m >= solve(n))
            ans ^= i;
        else
            ans ^= i - 1;
    }
    printf("%d\n", ans);
}
牛客比赛系列题解 文章被收录于专栏

加油加油

全部评论

相关推荐

天降大厂offer:想从事前端就放前端的技术栈,然后项目描述,还有项目做了什么内容,使用了什么技术解决了什么问题优化了什么性能。然后头像可以不要,在读也可以不要,还有bg的话就不要放课程,写哪个学校什么本科,还有绩点排名(如果高的话),然后就是技术栈写好一点,接下来就是项目(有实习就写实习,没有就到项目),项目放两个好一点的,自己包装一下,然后有参加什么竞赛放两个就好了,接下来就是靠你自己了,毕竟211还是很难容易找的,不像我们学院本
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务