codeforces 314 (Div 1) 题解
文章目录
- 前言
- A Sereja and Contest
- key
- 题意
- 思路
- B Sereja and Periods
- key
- 题意
- 思路
- 代码
- C Sereja and Subsequences
- key
- 题意
- 思路
- D Sereja and Straight Lines
- key
- 题意
- 思路
- E Sereja and Squares
- key
- 题意
- 思路
- 后记
前言
远古神题。既然被妖姬挑出来做了,而且做的并不是那么好,那就稍微总结一下。
这场比赛的A和B我全都没有想出来。
D题被卡精度然而存在整数做法。
E是赛后做的,是一道SB题,但是从这道题我知道了 1 0 5 10^5 105的数据范围也可以信仰 O ( n 2 ) O(n^2) O(n2)做法,只要大力卡常一定出奇迹。
倒是C因为套路所以做出来了。
思维极差,智商捉急。没有理由颓废了。
A Sereja and Contest
key
- 思维
题意
有 n ( n ≤ 2 ∗ 1 0 5 ) n(n \le 2*10^5) n(n≤2∗105)个人,参数 k k k,每个人有一个分数 a i a_i ai,还有一个 d i = ∑ j = 1 j ≤ i − 1 ( a j ∗ ( j − 1 ) − ( n − i ) ∗ a i ) d_i=\sum_{j=1}^{j \le i-1}(a_j*(j-1)-(n-i)*a_i) di=∑j=1j≤i−1(aj∗(j−1)−(n−i)∗ai)。
每次在序列中挑出 d i < k d_i<k di<k的序号最小的那个人踢出序列,然后后面的人序号全都前移一位。重复,直到没有人的 d i < k d_i<k di<k。
依次输出踢出的人在原序列中的序号。
思路
高妙思路。
我们观察公式,假如去掉了一个人,那么他前面的人的 d i d_i di一定增加了,所以踢出的人序号一定是递增的。这是重要性质。
然后只要从前往后扫,记录 a j ∗ ( j − 1 ) a_j*(j-1) aj∗(j−1)的前缀和,再记录去掉当前点前面所有该去掉的人后,当前点的序号,于是每个点的 d i d_i di都可以 O ( 1 ) O(1) O(1)算出来,与 k k k比较就好了。复杂度 O ( n ) O(n) O(n)。
不得不说是道好题,我不知道为什么其他人好像一眼就切掉了。我不会的都是好题
B Sereja and Periods
key
- DP
- 暴力
题意
[a, b]表示b个a串连在一起。
两个字符串 [ a , b ] [a,b] [a,b]和 [ c , d ] [c,d] [c,d],求在前者中去掉任意个字符,能变成的 [ [ c , d ] , p ] [[c,d], p] [[c,d],p]的最大的 p p p。 ( l e n ( a , c ) ≤ 100 , b , d ≤ 1 0 7 ) (len(a, c) \le 100, b,d \le 10^7) (len(a,c)≤100,b,d≤107)
思路
c n t [ i ] cnt[i] cnt[i]表示从 b b b串的 i i i位置开始匹配一个 a a a串可以匹配多少个 b b b串, n x t [ i ] nxt[i] nxt[i]表示下一次要从 b b b的哪个位置开始匹配。 O ( l e n 2 ) O(len^2) O(len2)预处理。
然后 O ( n ) O(n) O(n)暴力拿 b b b个 a a a串匹配。
代码
这题思路还是看代码比较好懂。
#include<bits/stdc++.h>
using namespace std;
const int N = 110;
int c, d, n, m, cnt[N], nxt[N];
char a[N], b[N];
bool exi[1000];int Solve(int pos)
{int j = 0, k = pos;for (int i = 1; i <= n; ++ i){if (a[i] == b[k]) ++ k;if (k == m+1) k = 1, ++ j;}cnt[pos] = j;nxt[pos] = k;
}int Ans()
{int j = 0, k = 1;for (int i = 1; i <= c; ++ i){j += cnt[k];k = nxt[k];}return j;
}int main()
{scanf("%d%d", &c, &d);scanf("%s%s", a+1, b+1);n = strlen(a+1);m = strlen(b+1);memset(exi, 0, sizeof(exi));for (int i = 1; i <= n; ++ i)exi[a[i]] = 1;for (int i = 1; i <= m; ++ i)if (!exi[b[i]]){puts("0");return 0;}for (int i = 1; i <= m; ++ i)Solve(i);printf("%d\n", Ans()/d);return 0;
}
C Sereja and Subsequences
key
- DP
- 树状数组优化
题意
有一个长度为 n n n的序列,求所有(不同的单调非减序列的各个数相乘的积)的和。
思路
非常easy,网上博客很多比如这个
D Sereja and Straight Lines
key
- 计算几何
- 二分
题意
塞雷哈在平面上放了n个点。 现在Sereja想要在平面上放置两条直线,以直角相交,使得其中一条直线与x轴以45度角相交,并且从点到直线的最大距离最小。
在这个问题中,我们考虑点 ( x 1 , y 1 ) (x1,y1) (x1,y1)和 ( x 2 , y 2 ) (x2,y2) (x2,y2)之间的距离等于 ∣ x 1 − x 2 ∣ + ∣ Y 1 − Y 2 ∣ | x1 - x2 |+| Y1 - Y2| ∣x1−x2∣+∣Y1−Y2∣。 点与直线之间的距离是从点到属于其中一条线的某个点的最小距离。
帮助Sereja,找到从点到最佳位置直线的最大距离。
思路
看这里吧tutorial。题解厉害的地方是用 ( x + y , x − y ) (x+y, x-y) (x+y,x−y)实现了旋转 45 45 45度,可以避免精度问题。
E Sereja and Squares
key
- DP
- 卡常
题意
给你一个长度 n ( n ≤ 1 0 5 ) n(n \le 10^5) n(n≤105),有一些地方已经填好括号了,求合法括号序列数。
思路
首先发现数据范围 n n n是 1 0 5 10^5 105,那么 O ( n 2 ) O(n^2) O(n2)就是 1 0 10 10^{10} 1010,假如计算机1秒大概跑 1 0 9 10^9 109次运算,那么 O ( n 2 ) O(n^2) O(n2)就有过的可能。先写出DP方程, f [ i ] [ j ] f[i][j] f[i][j]表示前 i i i位,放了 j j j个右括号的方案数。
然后你发现这个常数还挺好卡的,首先把对于每个 i i i的 j j j的上下界卡一卡,常数瞬间小了4倍,差不多了,但是如果精益求精的话还有很多可以卡的地方。
我目前在评测速度的第一页,可以去看看哦Amorphophallus。
后记
写题解挺累的,要是什么题网上找不到题解,也不要怪谁,真的好累。
codeforces 314 (Div 1) 题解相关推荐
- Codeforces Round #514 (Div. 2)题解
Codeforces Round #514 (Div. 2)题解 A 喵,直接模拟. B 枚举所有盖章时的,合法的,左上角的位置.能盖的话就盖一下.最后check一下图案是否相等即可 C 一轮一轮的扔 ...
- Codeforces Round #182 (Div. 1)题解【ABCD】
Codeforces Round #182 (Div. 1)题解 A题:Yaroslav and Sequence1 题意: 给你\(2*n+1\)个元素,你每次可以进行无数种操作,每次操作必须选择其 ...
- 【算法题解】Codeforces Round #817 (Div. 4)题解
文章目录 Codeforces Round #817 (Div. 4)题解 A. Spell Check B. Colourblindness C. Word Game D. Line E. Coun ...
- Codeforces Round #747 (Div. 2)题解
Codeforces Round #747 (Div. 2)题解 (本博客将持续更新以后每场CF div2的题解,喜欢ACM.OI的小伙伴记得点个关注哟) 昨天夜晚刷网络流刷入迷了,渐渐就忘记了我还要 ...
- Codeforces Round #789 (Div. 2)题解
Codeforces Round #789 (Div. 2)题解 A. Tokitsukaze and All Zero Sequence 原题链接 算法标签 贪心 排序 思路 情况一:数组存在零 → ...
- Codeforces Round #748 (Div. 3) 题解 完整A~G
Codeforces Round #748 (Div. 3) 题解 A. Elections 题意 已知竞选中三个候选人的当前得票数 a , b , c a,b,c a,b,c,现在可以增加任何一个人 ...
- codeforces div2 Not Assigning 题解
codeforces div2 Not Assigning 题解 原题链接 /* 题意:构造一棵素数树.素数树定义如下: 这颗树中任意一条边 or 任意两条边 权重之和为素数,每条边的权重自己分配. ...
- CF211 Div 1 题解
因为懒得再存着了,所以把latex代码也贴上来 \documentclass[12pt]{article} \usepackage{amsmath} \usepackage{amsthm} \usep ...
- Codeforces Round #533 (Div. 2)题解
link orz olinr AK Codeforces Round #533 (Div. 2) 中文水平和英文水平都太渣..翻译不准确见谅 T1.给定n<=1000个整数,你需要钦定一个值t, ...
最新文章
- Java一致性Hash算法的实现
- oracle v sql不存在,程序包oracle.sql不存在
- mysql bin oct_python 讲解进制转换 int、bin、oct、hex
- ETH 5分钟内涨幅2.06%,现价1104.03usdt
- cut out数据增强_被多种离散化场景困扰?8种python技巧!让数据处理更简单
- WindowsXP打开和关闭硬盘各分区的默认共享
- Matlab低通滤波器的使用--频域图像增强实验
- wordpress登录美化css,wordpress后台login界面美化
- Arduino: AD模数转换详解和电路搭建以及示例代码
- HTML中绑定点击事件的方式
- 【应急响应】Linux下变种DDG挖矿应急处理总结
- 关于ActionContext.getContext()的用法心得
- 为什么数组名取地址和数组名的取值一样
- Apache Arrow 简介
- 有哪些适合放在程序员办公桌上的高逼格物件?
- 刁肥宅数据结构课设:布隆过滤器的实现和应用(v 1.1,修正非最终版)
- 中国装备制造业寻找新路径:不数字化无未来
- Docker 配置网络 - 使用 host 网络
- 捷报|数说故事同期斩获虎啸奖、弯弓奖六项大奖
- Python实战案例,mplcyberpunk模块,Python实现赛博朋克数据可视化
热门文章
- 基于springboot的高校社团管理系统
- 淘宝的cnpm代替npm
- 2022-2028年中国祭祀用品行业市场竞争状况及发展趋向分析报告
- PHP语法基础1.2
- h3c 链路聚合测试_H3C设备实验之配置链路聚合
- 炸了!软件工程超高报录比31:1,北京航空航天大学,连非全都有近千人报考!...
- android MapBox地图基于openstreetmap开发
- 状态机的描述方法案例分析(一段式、二段式、三段式)
- TypeError: Cannot read properties of null (reading ‘indexOf‘)
- asp.net火车票务信息管理系统