首页 > 其他分享 >[赛记] 暑假集训CSP提高模拟17

[赛记] 暑假集训CSP提高模拟17

时间:2024-08-11 08:58:58浏览次数:6  
标签:赛记 17 int cin long 3005 ++ include CSP

符号化方法初探 100pts

签到题?做了得有1.5h+;

考虑全是正数或全是负数的情况,那么我们可以对其做一次类似于前缀和或后缀和的操作,需要 $ n - 1 $ 次;

所以我们只需将数列中的数全部转化成正数或负数即可,具体地,找出所有正数的和和所有负数的和,如果前者比后者要大,那么就将所有正数加起来,然后让所有负数加它,反之同理,然后做一遍上一步的类似于前缀和或后缀和的操作即可;

总操作数:$ 2n - 2 $ 次;

点击查看代码
#include <iostream>
#include <cstdio>
#include <vector>
#include <cmath>
using namespace std;
int n, m;
long long a[500005];
struct sss{
	long long i, j;
}e[2000005];
long long sumz, sumf;
vector<int> z, f;
int main() {
	cin >> n;
	for (int i = 1; i <= n; i++) {
		cin >> a[i];
		if (a[i] > 0) {
			sumz += a[i];
			z.push_back(i);
		} else {
			sumf += a[i];
			f.push_back(i);
		}
	}
	if (sumz >= abs(sumf)) {
		for (int i = 1; i < z.size(); i++) {
			e[++m] = {z[i], z[0]};
		}
		for (int i = 0; i < f.size(); i++) {
			e[++m] = {z[0], f[i]};
		}
		for (int i = 2; i <= n; i++) {
			e[++m] = {i - 1, i};
		}
	} else {
		for (int i = 1; i < f.size(); i++) {
			e[++m] = {f[i], f[0]};
		}
		for (int i = 0; i < z.size(); i++) {
			e[++m] = {f[0], z[i]};
		}
		for (int i = n - 1; i >= 1; i--) {
			e[++m] = {i + 1, i};
		}
	}
	cout << m << endl;
	for (int i = 1; i <= m; i++) {
		cout << e[i].i << ' ' << e[i].j << endl;
	}
	return 0;
}

无标号 Sequence 构造 0pts

原题:Luogu P10102 [GDKOI2023 提高组] 矩阵

暴力 $ \Theta(n^3) $ 很好打,然后就挂了。。。

主要是优化;

应该可以算是套路吧?当然也是随机化;

把左右两边同时乘一个 $ 1 * n $ 的矩阵,这样我们就可以在 $ \Theta(n^2) $ 的时间里判断是否相等;

这个矩阵随一个就行;

只要不乘出来变成 $ 0 $,那么这个东西就是对的;

正确率应该是 $ \frac{1}{998244353} $(貌似是秩-零化定理,我不会);

当然,你也可以让它最后变成 $ 1 * 1 $ 的矩阵,但时间复杂度是一样的,而且最后的正确率也会变低;

注意空间;

点击查看代码
#include <iostream>
#include <cstdio>
#include <ctime>
#include <cstdlib>
using namespace std;
#define int long long
const int mod = 998244353;
int t;
int n;
long long a[3005][3005], b[3005][3005], c[3005][3005], d[3005], e[3005], f[3005], g[3005];
main() {
	srand(time(0));
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin >> t;
	while(t--) {
		cin >> n;
		for (int i = 1; i <= n; i++) {
			for (int j = 1; j <= n; j++) {
				cin >> a[i][j];
			}
		}
		for (int i = 1; i <= n; i++) {
			for (int j = 1; j <= n; j++) {
				cin >> b[i][j];
			}
		}
		for (int i = 1; i <= n; i++) {
			for (int j = 1; j <= n; j++) {
				cin >> c[i][j];
			}
		}
		for (int i = 1; i <= n; i++) {
			d[i] = (rand() + mod) % mod;
		}
		for (int i = 1; i <= n; i++) {
			e[i] = 0;
			f[i] = 0;
			g[i] = 0;
		}
		for (int i = 1; i <= n; i++) {
			for (int j = 1; j <= n; j++) {
				e[i] = (e[i] + a[j][i] * d[j] % mod) % mod;
			}
		}
		for (int i = 1; i <= n; i++) {
			for (int j = 1; j <= n; j++) {
				f[i] = (f[i] + b[j][i] * e[j] % mod) % mod;
			}
		}
		for (int i = 1; i <= n; i++) {
			for (int j = 1; j <= n; j++) {
				g[i] = (g[i] + c[j][i] * d[j] % mod) % mod;
			}
		}
		bool vis = false;
		for (int i = 1; i <= n; i++) {
			if (f[i] != g[i]) {
				vis = true;
				break;
			}
		}
		if (vis) {
			cout << "No" << endl;
		} else {
			cout << "Yes" << endl;
		}
	}
	return 0;
}

标签:赛记,17,int,cin,long,3005,++,include,CSP
From: https://www.cnblogs.com/PeppaEvenPig/p/18353047

相关文章

  • [考试记录] 2024.8.10 csp-s 模拟赛18
    80+20+0+70=170第三题应该有10分暴力的,但我没打。T1星际旅行题面翻译总共有n个节点,m条路径,要求其中m-2条路径走两遍,剩下2条路径仅走一遍,问不同的路径总数有多少,如果仅走一遍的两条边不同则将这两条路径视为不同。样例#1样例输入#15412131415样例输......
  • C++17新特性
    C++17新特性语言特性使用auto声明非类型模板参量折叠表达式提供模板参数包的折叠template<typename...Args>boollogicalAnd(Args...args){//二元折叠return(true&&...&&args);}boolb=false;bool&b2=b;logicalAnd(b,b2,true);//==fa......
  • [ARC179E] Rectangle Concatenation
    MyBlogs[ARC179E]RectangleConcatenation唐完了。稍微观察一下发现矩形只有两种形态。考虑暴力:从每个\(i\)开始向后扫,设\(f_{j,0}\)表示能否拼在左右,\(f_{j,1}\)表示能否拼在上下。设\(S_{l,r}\)表示\([l,r]\)内矩形的面积和,没想到用面积判就败了:\[\begin{aligned......
  • 暑假集训CSP提高模拟17
    \[暑假集训CSP提高模拟\operatorname{EIJ}_{2}(6)-1\]\(\operatorname{EIJ}_{k}(A)\)定义为有\(A\)个球,\(k\)个盒子,盒子相同,球不同,把全部球放入的方案数Hint易知\(\operatorname{EIJ}_k(A)=\dfrac{A^k}{k!}\),详见这篇文章其实我觉得构造的过程更有意思:对一个给定的正......
  • 暑假集训csp提高模拟17
    赛时rank16,T1100,T250,T325,T425T4是简单题,但因为转移方程没有继承上一位状态,然后就挂了T3写了个神秘的状压,打了25的部分分T2暴力,T1正解T1符号化方法初探[ABC081D]Non-decreasing考虑最大值和最小值若\(abs(max)>abs(min)\),则将所有的负数加上最大值使其变为正,前缀......
  • 『模拟赛』暑假集训CSP提高模拟17
    RankA.符号化方法初探原[ABC081D]Non-decreasing挺水的,不过赛时想了错解。赛时做法是都塞到一个set里一遍推过去,如果比上一个小就lower_bound找一个最接近差的数加上,不过它存在比较大的问题。首先全是负判不了,会进入死循环;其次用map存下标也会出现存在两个相同的......
  • 【大作业-17】使用TensorFlow快速实现图像风格迁移系统
    使用TensorFlow快速实现图像风格迁移系统资源地址:28-基于Tensorflow的风格迁移+代码+模型+系统界面+教学视频.zip资源-CSDN文库视频地址:[使用Tensorflow实现图像风格迁移系统_哔哩哔哩_bilibili](https://www.bilibili.com/video/BV1VE421w7RY/)随着GPT的横空出世,生成......
  • springboot垂钓服务系统-计算机毕业设计源码17434
    摘要本文旨在针对垂钓爱好者的需求,基于微信小程序平台,设计并实现一套垂钓服务系统。首先,通过对用户需求进行调研和分析,确定了系统的基本功能模块,包括垂钓点信息展示、用户预约和支付、钓具租赁信息等。接着,借助微信小程序提供的开发框架和组件库,实现了系统的界面设计和交互功......
  • 暑假集训CSP提高模拟17
    暑假集训CSP提高模拟17组题人:@joke3579\(T1\)P222.符号化方法初探\(70pts\)原题:[ABC081D]Non-decreasing部分分测试点\(1\):输出样例\(1\)。测试点\(11\sim15\):由于\(\{a\}\)非负,所以对\(\{a\}\)作前缀和即可。随机\(pts\):乱搞。正解当......
  • P9750 [CSP-J 2023] 一元二次方程题目总结
    根据题面,我们将分为多种情况讨论:若a为负数,那么将a,b,c全部取反首先求出data=b^2-4*a*c;1,data<=0cout<<”NO”;否则带入求跟公式:-b/2a+(-)sqrt(data)注意::gcd(a,b)有可能为负数,此处应用abs(x)取绝对值若开根号data为有理数{-b为2*a的倍数则直接输出b否则输出b/gcd(b,2*a......