首页 > 其他分享 >7.17后记

7.17后记

时间:2023-07-17 19:00:29浏览次数:39  
标签:11 7.17 int 枚举 63 && 后记 Sigma

P6090 题解

传送门

神仙题

先考虑 \(O(|\Sigma| ^8)\) 做法:

\(\Sigma\):字符总数,本题为 大写字母 \(26\) 个+小写字母 \(26\) 个+数字 \(10\) 个。

预处理两个字母一首一尾可以组成多少种长度相同的字符串,枚举正方体 \(8\) 个顶点,计算每两个点之间贡献的积。

for (int a1 = 1; a1 <= 62; a1++)
    for (int a2 = 1; a2 <= 62; a2++) 
        ...
            for (int a8 = 1; a8 <= 62; a8++) 
                ans += v[a1][a2] * v[a1][a3] * ... * v[a7][a8];

再考虑 \(O(|\Sigma| ^7)\) 做法:

图中点 \(G\),\(A\),\(T\),\(S\) 之间三条边的贡献可以提前用 \(O(\sum ^4)\) 的复杂度预处理出来,

for (int l = 1; l <= 62; l++) 
	for (int i = 1; i <= 62; i++) 
		for (int j = 1; j <= 62; j++) 
			for (int k = 1; k <= 62; k++) 
				f[i][j][k] += v[l][i] * v[l][j] * v[l][k];

就只用枚举 \(7\) 个点了。

再推广一下,

我们可以把正方体分成 \(4\) 部分,每一部分都能用上面的预处理直接得出答案,就只用枚举体对角线的 \(4\) 个点了,复杂度 \(O(|\Sigma| ^4)\)。

注意:不同长度要分开处理

卡常优化小技巧

不影响答案时,多层循环时最后一层循环最好和循环内多维数组的最后一个下标对应,如图:

这样读取数组时是从 CPU 缓存直接读取的,速度更快。

经过折磨的测试,不这么写会喜提 TLE。

代码

#include<bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 5, mod = 998244353;

int n, ans;
int cnt[11];
int v[11][63][63];
int f[11][63][63][63];

int tran(char c) {
	if (c >= 'a' && c <= 'z') return c - 96;
	else if (c >= 'A' && c <= 'Z') return c - 38;
	else if (c >= '0' && c <= '9') return c + 5;
	else return 0;
}

string s[maxn];

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cin >> n;
	for (int i = 1; i <= n; i++) {
		cin >> s[i];
		s[i + n] = s[i];
		reverse(s[i + n].begin(), s[i + n].end());
	}
	n *= 2;
	sort(s + 1, s + 1 + n);
	n = unique(s + 1, s + n + 1) - s - 1;//去重
	for (int i = 1; i <= n; i++) {
		cnt[s[i].size()]++;
		v[s[i].size()][tran(s[i][0])][tran(s[i][s[i].size() - 1])]++;
	}
	for (int len = 3; len <= 10; len++) {
		if (!cnt[len]) continue;
		for (int l = 1; l <= 62; l++) {
			for (int i = 1; i <= 62; i++) {
				if (!v[len][l][i]) continue;
				for (int j = 1; j <= 62; j++) {
					if (!v[len][l][j]) continue;
					for (int k = 1; k <= 62; k++) {
						if (!v[len][l][k]) continue;
						(f[len][i][j][k] += 1ll * v[len][l][i] * v[len][l][j] % mod * v[len][l][k] % mod) %= mod;
					}
				}
			}
		}
		for (int l = 1; l <= 62; l++) {
			for (int i = 1; i <= 62; i++) {
				for (int j = 1; j <= 62; j++) {
					if (!f[l][i][j]) continue;
					for (int k = 1; k <= 62; k++) {
						(ans += 1ll * f[len][i][j][k] * f[len][i][j][l] % mod * f[len][i][k][l] % mod * f[len][j][k][l] % mod) %= mod;
					}
				}
			}
		}
	}
	cout << ans;
	return 0;
}

Tenzing and Triangle

线段树优化 \(dp\)(大雾)

Wonderful Jump

img

文文的摄影布置

区间中寻找三元组(i,j,k),使得 \(A_i-B_j+A_k\) 最大

算术天才⑨与等差数列

等差数列(公差为 \(k\) )\(\rightarrow\) %\(k\) 相同

判重:维护 \(\text{pre[i]}\) 记录 \(i\) 点前第一个与 \(i\) 相等的位置

每个值开 \(set\) ,记录值在序列上位置,方便修改 \(pre\)

区间gcd

  1. 信息 + 信息
  2. 标记 + 标记
  3. 信息 + 标记

img

方差

维护区间平方和

img

P不知道多少

二维数点

标签:11,7.17,int,枚举,63,&&,后记,Sigma
From: https://www.cnblogs.com/badnuker/p/17560937.html

相关文章

  • 【2023.07.17】keeppley周杰伦DZ0157周同学积木评测
    前言本人是自费购买积木,购买原因是给妹妹培养动手能力,减少短视频占用时间,其次是给家里做摆饰,所以选择积木多考虑了美观非专业评测,如果想看更多积木评测请点进我的博客主页分类查看正文这次的说明书颜色真的印刷质量感觉不太好(单指颜色,拼装过程说明还是很不错的),颜色真的很杂......
  • 7.17
    周一:今天也是正常早起练车五个人一辆车我一早上摸到车的次数都没有蚊子咬我的包多下午正常睡个午觉但是有个好消息教练有事所以可以晚点去这意味着我有足够的时间下午把学习进度完成......
  • 7.17 数据结构
    线段树小白逛公园动态维护最大子段和,没啥好说的文文的摄影布置考虑清楚标记分讨合并算术天才⑨与等差数列维护区间最大最小,如果是等差数列,有了端点就可以知道整个序列了,再维护哈希值对比就可以了,突然发现我之前这个解法是乱搞,只有充分性没有必要性,只是题目没有卡正解:维护......
  • 【日记】2023.7.17入职第一天
    2023.7.17入职第一天新开的全新板块,记录自己的实习生活。由于是校企合作的企业,所以面试较为轻松,很顺利的面试到了市场部的产品组,职位是产品工程师,后面可能会比较忙。2023.7.17晴天早上七点半起来洗漱,八点二十出发步行十分钟就到了公司。第一件事就是先签合同,三份合同,新人第一......
  • 7.16 后记
    听不懂(悲)DP知识刷表和填表SleepingCowsP主要难点在提前钦定不用来匹配的牛,状态加一个0/1,代表当前点之前是否有被钦定的牛若当前为牛棚,则\(f_{i,j,0}=f_{i−1,j,0}+(j+1)f_{i−1,j+1,0}\)\(f_{i,j,1}=(j+1)f_{i−1,j+1,1}\)若当前为牛牛,则\(f_{i,j,0}=f_{i−1,j−1,0}\)......
  • 2023.7.10-2023.7.17暑假第一周博客
    2023.7.10今天是暑假第一天,按照自己的计划,在这个假期我希望自己能够多学一些东西,毕竟自己已经上完了大二,马上就要进入大三,大学生活已经过半,在这两个月的事件中,我希望自己能对自己未来的职业有更充分的了解,同时对于大数据技术和数据的清洗,以及自己比较感兴趣的sovits和AI音乐方向......
  • 7.17 其他操作方法
    demo1concatStringstrA="www.mldn.cn";StringstrB="www.".concat("mldn").concat(".cn");System.out.println(strB);System.out.println(strA==strB);//和php不同,这里是:falsedemo2......
  • java反转部分链表后记
    由于链表只是一个单向链表所以不能在一次循环之内就直接进行反转操作又因为只需要反转部分链表所以只要将链表遍历到需要反转的最后一位,剩下的不用管了于是我想到了在第一遍循环中用HashMap获取需要反转的链表的部分,键代表下标,值代表原先链表中val之后第二遍遍历时按照将值按......
  • 8、后记 - 产品管理系列文章
          写到这里,产品管理系列文章算是告一段落了,后面的文章在IT管理系列文章里会对其进行另一个方面的描述。      此系列作为产品经理需要知道的内容,然后结合产品的几个方面进行的描述,希望对大家能够有所帮助,也希望对想做产品经理的人有所帮助。 ......
  • TopSolid 2023 v7.17 Multilingual edition full licensed
     T opSolid'Design2023在设计、钢材、模具和电极方面增加了近400项新功能: ·    逼真渲染模块已得到改进,引入了几个允许高质量逼真渲染的主要新功能。......