- 博客(17)
- 收藏
- 关注
原创 ShanDong Multi-University Training #2
B,J签到D:题意: 给你一堆点的坐标,给你一个半圆的圆心和半径,半圆可以旋转,问你半圆区域内最多容纳几个点。思路:看数据的数量级,On2的算法完全可以过,所以直接枚举所有点,让半圆的直径边过当前点,再遍历剩下的n-1个点,剩下的点分为在直径边左边和直径边右边两种情况,统计一下两种情况的点离圆心的距离小于半径的个数,然后取一个最大值就可。思路比较简单,代码稍微难写一点。(直接贴wushi代码了)#include<iostream>#include<algorithm&
2022-05-16 20:58:11
180
原创 [算法学习] 三分
三分的用途二分可以用来求解单调函数,三分可以用来求单峰/单谷函数的极值,当我们确定了某个单峰\单谷的函数表达式,就可以在O(log3n)的复杂度求出该函数的极值。三分的原理和二分类似,二分是将区间分为两半,每次根据mid的取值判断应该删除哪一个区间。三分则是将区间分成三部分,[l,mid1],[mid1,mid2],[mid2,r],每次根据mid1和mid2的取值来确定舍弃一个区间,从而不断缩小极值的取值范围。例如求一个二次函数的极值,我们将区间等分为3份,如果f(m1)<f(m2),说明m
2021-11-30 22:06:52
2328
原创 Educational Codeforces Round 117 (Rated for Div. 2)
A题暴力枚举即可B:(贪心+构造)题目大意:给出a b n n为偶数,构造一个长度为n的permutation,使得前n/2项的最小值为a,后n/2项的最大值为b。思路:先将a放到序列中,再贪心地从大到小插入,同时用桶标记插入过的数,因为插入较大的数,就能尽可能保证剩下的数的最大值足够小,插完后将剩下的没被标记的数插入,最后再遍历一遍验证合法性即可代码:#include<bits/stdc++.h>using namespace std;typedef long long ll;
2021-11-23 20:34:45
731
原创 拓扑排序模板
拓扑排序模板:vector<int> g[N];queue<int> q;int deg[N];//出度数 for (int i = 1; i <= n; i++) if (deg[i] == 0) q.push(i);//初始化,将叶子节点加入队列 int cnt = 0; while (!q.empty()) { int t = q.front(); q.pop(
2021-11-22 21:48:13
353
原创 矩阵快速幂
板子:#include <bits/stdc++.h>using namespace std;#define ll long longconst ll Mod = 1e9 + 7;ll n, k;struct matrix{ ll m[105][105];} a;matrix x(matrix a, matrix b){ matrix t; for (int i = 0; i < n; i++) for (int j = 0; j
2021-11-19 20:31:41
382
原创 Codeforces Round #551 (Div. 2)
A给出n号线公交车,给出人到达车站的时间点,给出每号公交车第一次到达车站和每几分钟来一班。人总是坐他到达车站之后来的第一辆公交车,如果有好几辆同时到,就输出任意一个。1.如果i号车第一次到的时间小于人到的时间,就找出i号车第一个大于人到达时间的到达时间。2.维护一个最小值,输出最小值的编号即可。 #include<bits/stdc++.h> using namespace std; const int N = 10050; typedef long long ll; int
2021-11-11 18:42:29
261
原创 搜索小专题
很水很水的一道搜索题分别用dfs和bfs写bfs其实更容易理解一点push旧节点拓展出来的新节点,pop旧节点,直到队列为空。#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N =110;int a[N][N];bool m[N][N];int dx[]={1,-1,0,0};int dy[]={0,0,1,-1};queue<pair<int, int&g
2021-11-08 20:22:40
69
原创 乱七八糟的小总结(待补充)
异或1.一个数异或0等于本身。2.一个数异或自己等于0。3.要使x通过异或变成y,使x ^ (x ^ y)即可。或待补充与待补充
2021-10-28 14:48:17
48
原创 icpc济南赛站补题记录 (思维题,区间贪心)
icpc济南赛站补题记录M:煎饼需要煎两面,一口锅能一次性煎k个饼,一共有n个饼需要煎,煎一面饼要一分钟,问你煎完n张饼需要几分钟如果k>=n两分钟煎完,否则需要(n*2+k-1)/k分钟G:给你一个x给你一个y,每次能用一个小于当前x的数异或x,使得最终的x=y思路1;我们知道,一个数异或自己等于0,一个数异或0等于本身,不考虑大小的话,我们直接让x ^ ( x ^ y)即可,如果x ^ y > x 就先让x ^ y,再 ^ x即可(x<x ^ y)#include&l
2021-10-27 21:01:42
327
原创 Codeforces Round #750 (Div. 2)
Codeforces Round #750 (Div. 2)A:共有分别有ABC首一二三分钟的歌,将这些歌分到两场演唱会里,问你两场演唱会持续时间的差值最小是多少。解:因为abc都大于1,至少有一个两分钟的和一个一分钟的歌,所以两场音乐会的持续时间的差值最大就是1,当且仅当所有歌的时间和为奇数时,差值为1.B:给你一个序列,问你有几个子序列的和等于原序列的和-1,只需要统计一下0和1的个数即可,符合条件的子序列个数=2cnt0 * cnt1C:给你一个字符串,要求删掉一种字母,使得字符串变
2021-10-25 20:23:43
120
原创 2020上海站 思维题
2020上海站补题记录G—Fibonacci问斐波那契数列前n项中,有几对数的乘积是偶数。斐波那契数列前两项是奇数,奇加奇等于偶,所以偶数隔三个出现一次,我们如果直接算每个数对答案的贡献,需要分偶数和奇数考虑,比较繁琐,所以我们可以考虑先把所有数对记上,再减去数对积不为奇数的个数就是答案。所以只需要算一下奇数的个数;#include<iostream>using namespace std;int main(){ long long n,m; cin>>n;
2021-10-22 09:44:16
56
原创 B. Take Your Places!(双指针,暴力)
B. Take Your Places!原题地址:题意给你一串数,只能交换相邻的两个数,使得数列中不存在相邻的奇偶性相同的数,就是按照 奇数 偶数 奇数 偶数 …\dots… …\dots… 交替排列,求最小的交换次数。思路:记录奇数和偶数的个数,如果奇偶数的个数差大于1,必然不能奇数偶数交替排列,如果奇数比偶数大1,必然是 奇 偶 奇 偶 奇 …… 奇 这样排列,反之就是偶数打头。遍历数组时用 cnto和 cnte记录一下当前有几个奇数偶数了,如果当前数i 是奇数,那它需要移动的距离是
2021-09-08 20:49:09
128
原创 B. Moamen and k-subarrays
链接:https://codeforces.com/contest/1557/problem/B题意:将一个数组分成k份,将每一份视作一个整体重新排序,问是否存在一种顺序,使得整体数组有序。思路:计算出将一个数组搞成有序至少需要将数组分成多少份,如果这个份数小于k,那么我们可以任意多分几个,更多的份数意味着更容易使数组有序。如果这个份数大于k,显然不行。那么如何寻找这个最少的份数呢?我们只需要将原数组中,不符合排序之后的数组的前后关系的子序列的个数求出即可:例如 : 1 3 4
2021-08-10 12:37:24
193
1
原创 B - Check-in question?
B - Check-in question?Bob is a sorcerer. He lives in a cuboid room which has a length of A, a width of B and a height of C, so we represent it as ABC. One day, he finds that his room is filled with unknown dark energy. Bob wants to neutralize all the dark
2021-07-20 21:53:52
137
原创 Codeforces Round #716 (Div. 2) C
原题链接:http://codeforces.com/contest/716/problem/C题意:给你一个x,初始值等于2。给你一个k,初始值为1,求x加上几个k,才能使得x+k满足下面两个条件:1.x+k是完全平方数2.x+k的平方根被k+1整除当满足条件1,2时,k+1,求每次让k+1需要让x加上几个k。思路:题目中说输出任意解,很明显这是一道构造题,而且暴力的写法很容易得到:#include<iostream>#include<cmath>using na
2021-04-09 09:52:18
118
原创 CF780B The Meeting Place Cannot Be Changed
洛谷评级就是辣鸡原题地址:https://vjudge.z180.cn/problem/CodeForces-782B题面:The main road in Bytecity is a straight line from south to north. Conveniently, there are coordinates measured in meters from the southernmost building in north direction.At some points on t
2021-01-14 21:30:21
226
1
原创 求第k小的数(魔改为前k大的数)
题面如下题面先来了解一下什么是快速排序。快速排序是一种基于分治思想的排序策略,大体步骤分为三步1.确定分界点2.调整区间 i,j指针3.递归处理左右两段下面给出一组数模拟一遍快速排序的过程地址 1 2 3 4 5 6 7数据 1 5 7 4 2 3 8首先,要确定左右边界l,r分别为1和7。定义两个指针 i和j分别指向1和7,及i=1,j=7。艹这也太难写了,我还是画图吧快排
2020-12-16 13:45:37
160
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人