余利区

 找回密码
 立即注册
楼主: 白沙洲

2022 ACM-ICPC 网络赛(1) 个人题解 更新至5题

[复制链接]

2

主题

5

帖子

9

积分

新手上路

Rank: 1

积分
9
发表于 2022-9-21 09:43:06 | 显示全部楼层
A题如果i=1的时候,s=1,那cnt=1,f=f[i-2]+1。这里的f[i-2]不就RE了咩[好奇][思考]
回复

使用道具 举报

0

主题

7

帖子

10

积分

新手上路

Rank: 1

积分
10
发表于 2022-9-21 09:43:48 | 显示全部楼层
越界不一定re()
回复

使用道具 举报

0

主题

1

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2022-9-21 09:44:32 | 显示全部楼层
a题能不能用线段树写啊,写崩了昨天[大哭]
回复

使用道具 举报

1

主题

6

帖子

5

积分

新手上路

Rank: 1

积分
5
发表于 2022-9-21 09:45:21 | 显示全部楼层
D题写了半天过不了,我感觉我二分写的没有问题呀
有没有大佬帮我看看问题在哪[大哭]
void init() {
        //枚举左半段1~111111111111111 的情况
        for (long long i = 0; i <= (1 << 16) - 1; i++) {
                //i必须是奇数,比如i=2  10作为左半段明显不符合
                if (i & 1) {
                        long long p = i, cnt = 0;
                        //寻找左半段1的个数
                        while (p) {
                                p &= p - 1;
                                cnt++;
                        }
                       //添加相同个数的0
                        nums.push_back(i << cnt);
                }
        }
        sort(nums.begin(), nums.end());
}
//二分
long long findVal(long long l, long long r) {
        int left = 0, right = nums.size() - 1, m;
        while (left <= right) {
                m = (left + right) / 2;
                if (nums[m] >= l && nums[m] <= r) {
                        return nums[m];
                } else if (nums[m] < l) {
                        left = m + 1;
                } else if (nums[m] > r) {
                        right = m - 1;
                }
        }
        return -1;
}
int main() {
        init();
        scanf("%d", &T);
        while (T--) {
                scanf("%ld%ld", &l, &r);
                printf("%ld\n", getVal(l, r));
        }
}
回复

使用道具 举报

2

主题

5

帖子

9

积分

新手上路

Rank: 1

积分
9
发表于 2022-9-21 09:45:58 | 显示全部楼层
在一顿卡顿之后,AC了[发呆]
回复

使用道具 举报

1

主题

6

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2022-9-21 09:46:10 | 显示全部楼层
可以
回复

使用道具 举报

1

主题

6

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2022-9-21 09:46:41 | 显示全部楼层
请问K就是80*5000*5000的复杂度吗,好卡啊
回复

使用道具 举报

1

主题

9

帖子

14

积分

新手上路

Rank: 1

积分
14
发表于 2022-9-21 09:47:22 | 显示全部楼层
这里不应该是如果当前点是0,对f没贡献,如果是1,我们要从这段连续的1的前边(那是一个0)递推贡献。我按这个逻辑改了这个部分,过了;可是为什么按作者的写法也能过?
回复

使用道具 举报

0

主题

5

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2022-9-21 09:48:21 | 显示全部楼层
为什么我这样写过不了呢,求教呜呜呜
#include<bits/stdc++.h>
using namespace std;
int mp[N];
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int n;
        cin>>n;
        memset(mp,0,sizeof mp);
        int a,b,cnt=0;
        for(int i=1;i<=n-1;i++)
        {
            cin>>a>>b;
            mp[a]++,mp++;
        }
        for(int i=1;i<=n;i++)
            if(mp==1)cnt++;
        cout<<cnt<<endl;
    }
    return 0;
}
回复

使用道具 举报

1

主题

5

帖子

3

积分

新手上路

Rank: 1

积分
3
发表于 2022-9-21 09:49:17 | 显示全部楼层
因为,n可以等于 1
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

云顶设计嘉兴有限公司模板设计.

免责声明:本站上数据均为演示站数据,如购买模板可以上DISCUZ应用中心购买,欢迎惠顾.

云顶官方站点:云顶设计 模板原创设计:云顶模板   Powered by Discuz! X3.4© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表