[美团 CodeM 初赛 Round A]数列互质】的更多相关文章

题目大意: 给出一个长度为n的数列a1,a2,a3,...,an,以及m组询问(li,ri,ki),求区间[li,ri]中有多少数在该区间中的出现次数与ki互质. 思路: 莫队. f[i]记录数字i出现的次数,用一个链表记录f[i]的出现次数. 一开始没用链表,用map,在SimpleOJ上随便A,但是在LOJ上只有50分. #include<cmath> #include<cstdio> #include<cctype> #include<algorithm&g…
#6164. 「美团 CodeM 初赛 Round A」数列互质 思路 : 对这个题来言,莫队可以 n*根号n 离线处理出各个数出现个的次数 ,同时可以得到每个次数出现的次数 , 但是还要处理有多少 次数 与ki互质 .根据数列的性质,无论这个区间多长,最长也就是 1 - n这个区间 ,所能产生的 不同的次数 也就是 根号 n 种  例如 长度为28的 数列    1 2 2 3 3 3 4 4 4 4 5 5 5 5 5 6 6 6 6 6 6 7 7 7 7 7 7 7 不同的次数 只有 7…
最长树链 树形DP.我们发现gcd是多少其实并不重要,只要不是1就好了,此外只要有一个公共的质数就好了.计f[i][j]表示i子树内含有j因子的最长链是多少.因为一个数的不同的质因子个数是log级别的,所以转移的复杂度是log方的.所以总共的时间复杂度就是nlog^2n. #include <cstdio> #include <vector> #include <map> #define R register #define maxn 100010 #define cm…
link : https://loj.ac/problem/6164 莫队傻题,直接容斥做. #include<bits/stdc++.h> #define maxn 100005 #define pb push_back using namespace std; vector<int> g[maxn]; struct ask{ int l,r,K,num,bl; bool operator <(const ask &u)const{ return bl==u.bl?…
LINK:#6177.美团 送外卖2 一道比较传统的状压dp题目. 完成任务 需要知道自己在哪 已经完成的任务集合 自己已经接到的任务集合. 考虑这个dp记录什么 由于存在时间的限制 考虑记录最短时间 因为时间越短 对于任务来说越优. 考虑设f[i][j][k]表示已经做完的任务为i接受的任务为j上次做的任务为k. 虽然看起来状态数为\(2^q\cdot 2^q\cdot q\)但是考虑j枚举的只是i的补集的子集 所以这样做状态数为\(3^q\cdot q\) 复杂度需要多乘一个q枚举决策 \(…
题目描述 一张$n$个点$m$条边的有向图,通过每条边需要消耗时间,初始为$0$时刻,可以在某个点停留.有$q$个任务,每个任务要求在$l_i$或以后时刻到$s_i$接受任务,并在$r_i$或以前时刻到$t_i$完成任务.同一时刻可以接受多个任务.问:最多能完成多少任务. 输入 第一行,三个正整数$n$.$m$.$q$: 接下来$m$行,每行三个正整数$u_i$.$v_i$.$c_i$,表示有一条从$u_i$到$v_i$,耗时$c_i$的边. 接下来$q$行,每行四个正整数$s_i$.$t_i$…
题目大意: 给你一棵带点权的树,找出一个最长的树链满足链上点权的最大公因数不为1. 思路: 暴力DP. 对于每个点,记录一下以这个点为一个端点的所有链的最大公因数及长度. 然后暴力转移一下,时间复杂度O(n^2logn),不过中间有一些情况是可以舍掉的,做不满. 本来是想试试这样暴力能拿多少分的,没想到直接A掉了. #include<cstdio> #include<cctype> #include<vector> #include<hash_map> in…
题目描述 Mr. Walker 最近在研究树,尤其是最长树链问题.现在树中的每个点都有一个值,他想在树中找出最长的链,使得这条链上对应点的值的最大公约数不等于1.请求出这条最长的树链的长度. 输入格式 第一行一个整数 n,表示点的个数. 接下来 n−1 行,每行两个整数 x,y 表示 x,y 之间有边. 数据保证给出的是一棵树. 接下来一行 n 个整数表示每个点对应的权值 ai​. 输出格式 输出一个整数,表示这条树链的长度. 样例 样例输入 4 1 2 1 3 2 4 6 4 5 2 样例输出…
水一水 枚举各个质数,把是这个数倍数的点留下,跑直径,没了 #include <bits/stdc++.h> using namespace std; int h,t,n,p,q,M,N; ],lis[],fir[],nex[],to[]; vector<]; map<int,int> ma; bitset<> vis,ok,v; void add(int p,int q) { to[++M]=q;nex[M]=fir[p];fir[p]=M; } int bfs…
题意 游乐园被描述成一张 n 个点,m 条边的无向图(无重边,无自环).每个点代表一个娱乐项目,第 i 个娱乐项目需要耗费 ci 分钟的时间,会让小 y 和妹子的开心度分别增加 h1i ,h2i ,他们俩初始的开心度都是 0 .每条边代表一条路,第 i 条边连接编号为 xi , yi 的两个娱乐项目,从 xi 走到 yi 或者从 yi 走到 xi 耗费的时间都是 ti 分钟.小 y 和妹子预计在游乐园里玩 k 分钟.最开始的时候,小 y 和妹子会等概率的随机选择一个娱乐项目开始玩,每玩完一个项目…