首页 > 其他分享 >CSP-S 模拟赛 36

CSP-S 模拟赛 36

时间:2024-10-11 21:01:09浏览次数:6  
标签:缩点 int 代码 36 考虑 CSP 模拟 define

CSP-S 模拟赛 36

T1

由于 \(a_i\le 10^5\),那么考虑枚举这个 \(\gcd\),考虑求 \(f(i)\) 表示答案,那么 \(\operatorname{ans}=\sum i\times f(i)\)。然而式子中有 \(\gcd\),于是考虑求 \(g(i)\) 表示 \(i\mid\gcd\) 的方案数,然后 \(f(i)=g(i)-\sum_{j>i,i\mid j}f(j)\)。对于 \(g(i)\),求出每一行 \(x\) 的倍数即可。

时间复杂度 \(O(n\log n)\)。

代码:

#include <bits/stdc++.h>
#define N 22
#define M 100005
#define int long long
#define mod 1000000007
using namespace std;
int n, m, mx;
int a[N][M];
int bs[N][M];
int cnt[N][M];
int dp[N];
int ans;
signed main() {
	freopen("b.in", "r", stdin);
	freopen("b.out", "w", stdout);
	cin >> n >> m;
	for (int i = 1; i <= n; i++)
		for (int j = 1; j <= m; j++) {
			scanf("%lld", &a[i][j]);
			bs[i][a[i][j]]++;
			mx = max(mx, a[i][j]);
		}
	for (int i = 1; i <= n; i++)
		for (int j = 1; j <= mx; j++)
			for (int k = 1; k * j <= mx; k++)
				cnt[i][j] += bs[i][k * j];
	for (int i = 1; i <= mx; i++) {
		dp[i] = 1;
		for (int j = 1; j <= n; j++)
			dp[i] = dp[i] * (cnt[j][i] + 1) % mod;
		dp[i] = (dp[i] - 1 + mod) % mod;
	}
	for (int i = mx; i >= 1; i--) {
		for (int j = 2; i * j <= mx; j++)
			dp[i] = (dp[i] - dp[i * j] + mod) % mod;
		ans = (ans + dp[i] * i % mod) % mod;
	}
	cout << ans << "\n";
	return 0;
}

T2

强连通分量问题考虑先对原图缩点,考虑一个被缩点后的不合法的点集一定是一个 DAG。那么对于一个不合法的子图 \(S\),一定有一个强连通的子图 \(T\),满足 \(S,T\) 之间的边都是 \(S\rightarrow T\)。其实 \(T\) 集合就是缩点后拓扑序最小的点对应的点集。

那么反向地考虑,对于一个强连通分量 \(S\),其中每个点的出边的交集是 \(T\),那么对于 \(T\) 的子集 \(R\),\(S|R\) 便是不合法的子集。这样一来每个子图都会被遍历一次,时间复杂度 \(O(2^n)\)。

代码:

你被骗了,这里没有代码,不要问我为什么。

T3

抽象题,请稍后再拨。

T4

考虑将边的维护转为点的维护。想到这个基本上这题就完了。显然每次染色相当于对每个点打上一个新的时间戳,时间戳相等的两端就是白色边,否则黑色边。然后就是套路树链剖分。

代码:

你又被骗了,这里没有代码,不要问我为什么。

标签:缩点,int,代码,36,考虑,CSP,模拟,define
From: https://www.cnblogs.com/Rock-N-Roll/p/18459319

相关文章

  • CSP-S 模拟赛35
    CSP-S模拟赛35T1其实是傻逼题。常见的套路是枚举右端点,动态维护左端点的贡献。发现右端点移动一位只会对一种颜色有影响,那么考虑线段树维护区间的答案,区间加减每个颜色即时的贡献即可。代码:#include<bits/stdc++.h>#defineN1000005#defineM8005#defineintlonglong......
  • 『模拟赛』多校A层冲刺NOIP2024模拟赛05
    Rank烂。A.好数(number)签,唐,没签上。考虑之前几次类似的题方法都是选\(k-1\)的方案存起来以使总复杂度除以一个\(n\),故考虑记共\(n^2\)个两两组合之和,枚举当前点\(i\)前面的点,找是否有值为它们的差的组合,复杂度\(\mathcal{O(n^2)}\),用map记再挂个\(\logn\)。赛......
  • 多校A层冲刺NOIP2024模拟赛05
    T1、好数(number)签到题把选三个数相加拆为选择一个数,然后看前面有没有能用两个数组合出答案。$O(n^2)$。码(#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;typedefunsignedlonglongull;typedefpair<int,int>pii;#definemkmake_pair#de......
  • [10.11]CSP-S模拟赛
    宝贵经验:写题的时候想出时间正确的方法后千万注意计算空间,能不用数组的地方就不要用,否则可能会像我一样:\(35\to15\to0\)赛前小L说比上次简单。赛时T1一开始没有思路,但是注意到了两个关键条件:询问数\(\le300\)\(n,m\le10^9\)然后想到正解绝对不是去直接修改。注......
  • c语言模拟实现库函数 strlen strcpy strcat strcmp strstr
    一、模拟实现库函数strlen解释:strlen是求字符串长度的,求出的长度是不可能为负数所以返回类型设置为size_t也是合情合理的 typedefunsignedintsize_t\注意字符串已经'\0'作为结束标志,strlen函数返回的是在字符串中'\0'前面出现的字符个数(不包含'\0')。size_......
  • coduck 复赛模拟赛三 补题报告 侯锦呈
    自测160分第一题30分第二题100分第三题30分(后来100分 自己改的)第四题0分第一题十五的月亮题目描述假设一个每个月都是30天,用0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1表示一个月30天中的月亮......
  • 10.11 模拟赛(云智计划 模拟测#26)
    S---【云智计划】---6月23日---模拟测#26div1【补题】-比赛-梦熊联盟(mna.wang)S---【云智计划】---6月23日---模拟测#26div2【补题】-比赛-梦熊联盟(mna.wang)复盘A。看到\(n\)为偶数思路秒出。10min过样例。B。好像不太会做啊。模拟了样例2,猜出了一个很优的......
  • csp-s真题题解
    csp题目讲解P8818[CSP-S2022]策略游戏学习笔记感觉非常复杂?对于现在的我还是有深度的,首先第一个大坑就是并不需要真的求出c矩阵,这个题意就是让你在区间中选数,但要求乘积最大,所以要分讨。你假定\(a_i\ge0\),那这时如果\(min(b_i)\ge0\)取\(max(a_i)\),否则取\(min(a_i\ge......
  • [45] (多校联训) A层冲刺NOIP2024模拟赛05
    这是什么午休,大黄突然走进来大黄:闪电特效!其他人:?大黄:5k!其他人:???大黄:【闪电特效】【闪电特效】男人中的男人【闪电特效】【闪电特效】雄性中的雄性【闪电特效】【闪电特效】巅峰!【闪电特效】【闪电特效】A.好数简单变形一下\[f_i+f_j+f_k=c\]\[f_j+f_k=c-f_i\]然......
  • 多校A层冲刺NOIP2024模拟赛05
    咋是计数专场啊,讨厌计数!就会一个签到题,恼了。rank21,T1100pts,T20pts,T320pts,T40ptsdp设计状态不行。T3典型的背包没看出来,T2简单dp不会设计状态。有一些套路还是要学好数(number)签到题。假设一个数\(a_i\)是好数,那么一定有\(a_i=a_x+a_y+a_z(x\ley\lez)\)用一个b......