首页 > 其他分享 >CW 11.02 模拟赛 FSYo T1

CW 11.02 模拟赛 FSYo T1

时间:2024-11-02 14:59:48浏览次数:4  
标签:FSYo int 复杂度 T1 num MAXN MAXCNT copy CW

题面

自出题
挂个 pdf
题面下载

算法

暴力

可能的答案只有 \(O(n^2)\) 个, 考虑每个答案 \(\rm{check}\) 是 \(O(n \log n)\) 的
总时间复杂度 \(O(n ^ 3 \log n)\)

/*O(answer * n * logn), 即 O(n^3logn) 的算法, 预期 60pts*/

/*对于每一种可能的答案, 首先对于每一个点, 计算其配对点是否存在, 若存在, 则继续, 否则退出*/
#include <bits/stdc++.h>
#define int long long
const int MAXN = 2e3 + 24;
const int MAXCNT = 4520641;

int n;
int a[MAXN], b[MAXN];
int b_copy[MAXN];
int Appear_Time[MAXN];
int num = 0;

int Possible_X[MAXCNT];
int cnt = 0;

int Ans[MAXCNT];
int lsy = 0;

class LSH
{
private:

public:
    void solve()
    {
        num = std::unique(b_copy + 1, b_copy + n + 1) - (b_copy + 1);
        for (int i = 1; i <= n; i++)
        {
            b[i] = std::lower_bound(b_copy + 1, b_copy + n + 1, b[i]) - b_copy;
            Appear_Time[b[i]]++;
        }
    }
} lsh;

class Solution
{
private:
    int Appear_Time_Copy[MAXN];
    void init()
    {
        for (int i = 1; i <= n; i++)
        {
            Appear_Time_Copy[i] = Appear_Time[i];
        }
    }
    bool check(int x)
    {
        init();
        for (int i = 1; i <= n; i++)
        {
            int Need = x ^ a[i];
            int pos = std::lower_bound(b_copy + 1, b_copy + n + 1, Need) - b_copy;
            if (b_copy[pos] != Need || Appear_Time_Copy[pos] == 0)
                return false;

            Appear_Time_Copy[pos]--;
        }
        return true;
    }

public:
    void solve()
    {
        for (int i = 1; i <= cnt; i++)
        {
            int NowX = Possible_X[i];
            if(check(NowX))
            {
                Ans[++lsy] = NowX;
            }
        }

        std::sort(Ans + 1, Ans + lsy + 1);
        lsy = std::unique(Ans + 1, Ans + lsy + 1) - (Ans + 1);
        printf("%lld\n", lsy); // 520
        for (int i = 1; i <= lsy; i++)
        {
            printf("%lld\n", Ans[i]);
        }
    }
} Sol;

signed main()
{
    //freopen("f.in", "r", stdin);
    //freopen("f.out", "w", stdout);

    scanf("%lld", &n);
    for (int i = 1; i <= n; i++)
        scanf("%lld", &a[i]);
    for (int i = 1; i <= n; i++)
        scanf("%lld", &b[i]), b_copy[i] = b[i];

    std::sort(b_copy + 1, b_copy + n + 1);

    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= n; j++)
        {
            Possible_X[++cnt] = a[i] ^ b[j];
        }
    }

    lsh.solve();
    Sol.solve();

    return 0;
}

/*
3
1 2 3
6 4 7

1
5
*/

/*
2
0 1
0 2

0
*/

优化

观察到符合条件的 \(x\) , 当且仅当 \(x\) 出现了 \(\geq n\) 次, 判断后复杂度变为 \(O(n ^ 2)\)
具体的, 使用 hash 存储

标签:FSYo,int,复杂度,T1,num,MAXN,MAXCNT,copy,CW
From: https://www.cnblogs.com/YzaCsp/p/18521908

相关文章

  • ACWing1207_大臣的旅费(bfs)
    有一些自己的理解不知道大家能不能看懂1207.大臣的旅费-AcWing题库高质量的算法题库https://www.acwing.com/problem/content/1209/很久以前,TT 王国空前繁荣。为了更好地管理国家,王国修建了大量的快速路,用于连接首都和王国内的各大城市。为节省经费,TT 国的大臣们经过......
  • 【无标题】Acwing1238_日志统计(双指针)
    原题链接 :1238.日志统计-AcWing题库https://www.acwing.com/problem/content/1240/题目要求:/***小明维护着一个程序员论坛。现在他收集了一份”点赞”日志,日志共有N行。*其中每一行的格式是:tsid表示在ts时刻编号id的帖子收到一个”赞”。*现在小明......
  • 《上海市计算机学会竞赛平台2024年8月月赛丙组题目T1 统计得分 T2 等差数列的素性 T3
    T1统计得分内存限制: 256 Mb时间限制: 1000 ms题目描述在一场知识竞赛中,选手答对一题得 11 分,答错不得分且要倒扣 11 分,但扣分不能让分数小于 00。给定一个由 Y 及 N 构成的字符序列,答对记为 Y,答错记为 N。选手一开始从 00 分开始,请输出选手最后的得分......
  • GA/T1400视图库平台EasyCVR视频分析设备平台微信H5小程序:智能视频监控的新篇章
    GA/T1400视图库平台EasyCVR是一款综合性的视频管理工具,它兼容Windows、Linux(包括CentOS和Ubuntu)以及国产操作系统。这个平台不仅能够接入多种协议,还能将不同格式的视频数据统一转换为标准化的视频流,通过无需插件的H5直播技术,在网页端实现多格式视频的流畅播放。这种特性极大地增强......
  • 【10-31模拟赛T1】四舍五入
    给出\(n\),对于任意正整数\(i\)满足\(1\leqi\leqn\),求有多少个正整数\(j\)满足\(1\leqj\leqn\)且\(i\bmodj\leq\frac{j}{2}\)。枚举\(i\)不好处理,可以反过来,外层枚举\(j\),内层枚举左右端点\(l=kj,r=kj+\lfloor\frac{j}{2}\rfloor\)(\(k\)为自然......
  • 【已解决】vmware+ubunt14,编译海思3798MV100 ,HiSTBLinuxV100R005C00SPC050-master,报f
    于2023-07-1609:49:36发布没看懂,不知道问题出在哪里make[1]:Enteringdirectory/home/andy1231/Downloads/HiSTBLinuxV100R005C00SPC050-master/tools/linux/utils'make[1]:Enteringdirectory/home/andy1231/Downloads/HiSTBLinuxV100R005C00SPC050-master/source/kern......
  • CSP-J2024 T1(poker/扑克)题解
    洛谷CSP-J2024自测指路前情提要:虽然洛谷讨论区里大多数都是倾向用哈希解决该题,但实际上可以用一些邪门小技巧来A这道题awa先来读题。题目中说小P想知道他至少得向小S借多少张牌,才能让从小S和小Q借来的牌中,可以选出52张牌构成一副完整的扑克牌。题目说了是求至少要......
  • 0x02 Leetcode Hot100 哈希
    前置知识掌握每种语言的基本数据类型及其时间复杂度。Python:list、tuple、set、dictC++:STL中的vector、set、mapJava:集合类中的List、Set、Map为什么是哈希?在不同语言中,对于字典(dict)类的数据都会先将其键(key)进行哈希(Hash)运算,这个Hash值决定了键值对在内存中的存储位置,因此......
  • CSP-J 2024-T1扑克牌
    方法一:使用二维字符数组存储,利用字符串函数比较去重#include<bits/stdc++.h>usingnamespacestd;intn;chara[62][3];//注意此处第二维数组需要开3否则会出现未知错误intcnt;//用于统计去重后的个数intmain(){ //cout<<strcmp("dd","dd")<<""<<strcmp("......
  • AcWing 802:区间和 ← 离散化
    【题目来源】https://www.acwing.com/problem/content/804/【题目描述】假定有一个无限长的数轴,数轴上每个坐标上的数都是0。现在,我们首先进行n次操作,每次操作将某一位置x上的数加c。接下来,进行m次询问,每个询问包含两个整数l和r,你需要求出在区间[l,r]之间的所......