首页 > 其他分享 >缩小数据范围——nc2.4多校_A.新春游戏之数学系列

缩小数据范围——nc2.4多校_A.新春游戏之数学系列

时间:2024-02-04 22:11:06浏览次数:33  
标签:cnt const int ll 多校 nc2.4 新春 first define

目录

问题概述

原题参考A.新春游戏之数学系列
大致就是给出一个数组,要求求出一个公式的值,有几个数据范围值得注意一下,一是数组的长度为[0, 1e6],二是数组元素的和不超过5e7

思路分析

赛时第一眼准备去分析公式看看有没有可以优化的,用前缀拆分优化一下,但是没找到,因此就暂时搁置,毕竟这个n的大小肯定是不能O(n2)的,之后的优化又走错方向了,想着把求二进制数的1的个数优化一下,用map记录,但是没有用,这样还是跑不掉n2的时间;
事实上,该题的重点在于上面标记的位置数组元素的和不超过5e7,根据这个我们可以求出数组中不同元素的个数事实上是小于1e4的,这样的话我们就可以通过map记录,遍历map得到答案
至于1e4是怎么得到的,1+2+...+k <= 5e7,k<1e4的这样就可以通过一个O(k2)解决该问题

参考代码

#include <bits/stdc++.h>
using namespace std;
#define FAST_IO ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
#define endl '\n'
#define pll pair<long long, long long>
#define pii pair<int, int>
#define vi vector<int>
#define vl vector<long long>
#define ll long long
#define ull unsigned long long
const ll INF = 9187201950435737471;
const int inf = 2139062143;
const ll mod = 998244353;
const double eps = 1e-6;
const double PI = acos(-1.0);
const int N = 1e6+7;
map<int, int> _cnt;
int n, a[N];
ll ans = 0;
int gcd(int a, int b) {
    return b ? gcd(b, a%b) : a;
}
int lowbit(int x) {return x&-x;}
int cnt(int x) {
    int res = 0;
    while(x) {
        res ++;
        x -= lowbit(x);
    }
    return res;
}
void solve() {
    cin >> n;
    for(int i=1; i<=n; i++) {
        cin >> a[i];
        _cnt[a[i]] ++;
    }
    for(auto x:_cnt) {
        for(auto y:_cnt) {
            ans += (_cnt[x.first] * _cnt[y.first] % mod) * gcd(x.first, y.first) %mod * (cnt(x.first) + cnt(y.first));
            ans %= mod;
        }
    }
    cout << ans << endl;
}
int main() {
#ifdef xrl
    freopen("in.txt", "r", stdin), freopen("out.txt", "w", stdout);
#endif
    FAST_IO;
    int t = 1;
    //cin >> t;
    while(t --) solve();
#ifdef xrl
    cout << "Time used = " << (double)(clock() * 1.0 / CLOCKS_PER_SEC) << "s";
#endif
    return 0;
}

做题反思

这个题没做出来其实还是做得少了,没有经验,就像是之前的拆分也是,事实上,我甚至没有注意到那个元素和小于5e7的条件,别说利用这个条件去缩小数据范围了

标签:cnt,const,int,ll,多校,nc2.4,新春,first,define
From: https://www.cnblogs.com/notalking569/p/18007101

相关文章

  • 拼手速!9999个鹅厂红包封面带你龙码精神过新春
    过去的一年是波涛起伏的一年大模型的爆发催化了产业的迭代技术与应用的内卷却让程序员渐生迷茫未来的一年仍是充满期待的一年只因再先进的超算,也无法定义人类的边界总有人在砥砺前行,追寻缝隙中透出的那一丝光明社区是一群志同道合伙伴的聚集地我们在这分享宏大叙事里的微小......
  • 武汉星起航:新年伊始,国产游戏行业迎来新春华章
    2024年的脚步渐近,随着12月份新批国产网络游戏版号数量过百,中国游戏行业再次迎来一轮繁荣的浪潮。这一系列积极信号不仅释放出支持网络游戏行业健康发展的强烈信号,也为游戏从业者们带来了新的发展机遇。在企业端,游戏版号的大幅增长不仅证明了监管部门对游戏行业的支持态度,也为创业者......
  • 20231213-sdfz多校集训-DS
    非lxl的DS不会线性代数,只能来写DS了。20231226-没有逻辑,直接放例题。P1527矩阵乘法-整体二分P1527[国家集训队]矩阵乘法给你一个\(n\timesn\)的矩阵,不用算矩阵乘法,但是每次询问一个子矩形的第\(k\)小数。\(1\leqn\leq500\),\(1\leqq\leq6\times......
  • 牛客2022多校DAY10-K You are given a tree
    「牛客2022多校DAY10-K」Youaregivenatree...简要题意给一棵带点权和边权的树,找到至多\(k\)个点权不同的点,使得它们之间路径覆盖的边权和最大。\(n\le5000,k\le5\)。Solution考虑颜色数量不大的时候怎么暴力。显然可以直接状压DP,压一下当前选择的颜色集合为\(S\),......
  • 20231212-sdfz 多校集训-杂题选讲
    杂题选讲20231212《批题乱讲》[ARC132E]Paw-期望+计数AT_arc132_e[ARC132E]Paw长为\(n\)的字符串,每个地方可能是<>.每次随机一个.的地方,然后等概率向左向右。直到走出边界或者走到.。路上会留下相同方向的符号。问最后期望<的个数有多少。\(1\len\l......
  • 2023 牛客多校 9 B
    给定\(1\lea<m\le10^9\),求\(1\leu\le10^{18}\)使得\(a^u\equivu\pmodm\)。做法先考虑不限制解的大小怎么做。显然有如果\(a^v\equivv\pmod{\varphi(m)}\),且\(v\ge\varphi(m)\),则\(a^{a^v}\equiva^v\pmodm\),于是取\(u=a^v+m\varphi(m)......
  • 2023 牛客多校 8 E
    神仙题。题意计数长度为\(n\),满足以下条件的序列\(a\)个数\(\bmod998244353\):\(L\lea_i\leR\)。\(S_1(\suma_i)\equivS_2(\suma_i)\pmodm\)。其中\(S_1(x)\)表示\(x\)的各个数位的和,\(S_2(x)\)表示各个数位平方和(十进制下)。数据范围:\(1\len,m\le20,1\l......
  • 【多校联考NOIP#12】比赛复盘
    A.星穹铁道读完题面就想到了\(O(n^2)\)的暴力。很好想,但是只有40分。观察到\(z_i=\pm1\),然而即便如此,我也没有得到有用的性质。(正解是用到这个性质的)然后我就暴力写了。正解的性质“最终在一个区间L,R内,初始也一定在一个连续段内”赛事没有想到。同时题解用了逆向思维,对......
  • 2023牛客暑期多校训练营8 B Bloodline Counter 指数型生成函数 容斥 多项式求逆
    传送门容易想到求出竞赛图上最大环\(\lek\)的数量,再求出\(\lek-1\)的数量作差即可得到答案。设指数型生成函数\(G(x)\)表示大小为\(i\)的环的方案数。\(G(x)=\sum_{i=1}^k\frac{a_i}{i!}x^i\)那么最大环\(\lek\)的数量\(=[x^n]n!\sum_{i=1}^ki!\frac{(G(x))^i}{i!}\)这里......
  • 【多校联考NOIP#3】比赛复盘 && 题解
    A.卡牌这次比赛,一道签到题都没有。本来以为是线段树上二分。就类似于花神的数论题那道,刚开始暴力修改(修改到线段树的每一个叶子节点),然后由于boss的attack在不断增加,到了\(Att_i>=hp_j\)的时候,\(j\)这个牌顶多打一次,如果一个区间的\(max\)都小于boss的攻击力了,那么就不......