- 博客(126)
- 资源 (6)
- 收藏
- 关注

原创 Java 多线程?什么鬼哦?
多线程线程与进程的区别在计算机中,我们把一个任务称为一个进程。在进程内部可以同时执行多个子任务,我们把子任务称为线程。即:一个进程至少包含一个线程。Java多线程一个Java程序就是一个JVM进程,该进程用一个主线程来执行main()方法,在main()方法内部又可以存在多个线程。创建线程线程的创建public class Main{ public static void main(String[] args) { Thread thread = new Thread();
2020-07-30 12:30:38
173

原创 JAVA内部类是个啥?
文章目录内部类分类成员内部类局部内部类匿名内部类简化代码接口静态内部类内部类的部分好处参考资料内部类分类广泛意义上的内部类一般来说包括四种:成员内部类,局部内部类,匿名内部类和静态内部类。成员内部类class Circle { double radius = 0; public Circle(double radius) { this.radius = radius; } class Draw { //内部类
2020-07-02 10:14:20
396
4

原创 C++STL!这篇就够了!
文章目录max()/min()对若干元素的使用Vector元素求和求范围内最大/小值(数组也可)对于Vector对于数组统计数量对于Vector对于数组DequeList合并两个链表Priority_queuemax()/min()对若干元素的使用int maxx = max({1,2,3,,,});int minn = min({1,2,3,,,});Vector元素求和需要头文件#include<numeric>accmulate函数,返回求和之后的值。在字符串相加时不能使
2020-05-29 11:50:24
249
原创 病毒侵袭持续中 HDU - 3065
题目链接HDU-3065AC代码因为没有在文本串字符超出字典树范围之后重置now节点导致一直WAWAWAWA。要理解板子呀!#include <cstdio>#include <cstring>#include <queue>using namespace std;int const NUM = 5e4 + 10;int const LEN = 26;int const N = 2e6 + 6;char str[1010][100];cha
2021-02-23 21:43:19
182
原创 Consistency Checker LightOJ - 1129
题目链接LightOJ-1129题解字典树的简单应用。见AC代码注释。WA没有使用字典树。建立了sets数组记录字符串中字母是否出现,对每一个字符串,遍历其所有的字符并在sets中将该字符位置设置为true。由于在这之前对所有的字符串按长度进行了排序,故只需要判断第一个字符串之外的所有字符串的字符位置是否全部为true即可。问题所在:3911912111对于这一组样例将返回错误的结果。#include <string>#include <iostream&g
2021-02-20 13:00:20
227
原创 Treasure Hunt POJ - 1066
Treasure Hunt POJ - 1066思路感觉这个题的思路就很NICE。看似很复杂,但是实现的很简单。WA代码忽略了n为0的情况。在这种情况下,代码会得到INF+1的错误答案。(板子上打错了一个x,我有罪#include <cstdio>#include <cmath>#include <vector>using namespace std;double const eps = 1e-8;int sgn(double x) {
2020-12-14 16:18:22
247
原创 An Easy Problem?! POJ - 2826
An Easy Problem?! POJ - 2826线段交点求解线段交点与求解直线交点大体一致,区别在于求解线段交点之前需要先判断一下两个线段是否相交。之后都是利用比例算出交点。WA1代码刚开始理解错了题意,自以为上方被盖住的情况也是可以进水的QAQ。(果然脑子被天灵盖盖住也是可以进水的#include <cstdio>#include <cmath>#include <algorithm>using namespace std;int con
2020-12-13 20:49:05
187
原创 Pick-up sticks POJ - 2653
Pick-up sticks POJ - 2653TLE代码直接暴力搜索太慢了,1e5的数据量过不去。#include <cstdio>#include <cmath>#include <algorithm>using namespace std;int const N = 1e5 + 10;double const eps = 1e-8;int sgn(double x) { if (fabs(x) < eps) return 0;
2020-12-13 11:04:21
140
原创 Worker HDU - 6576
Worker HDU - 6576多个数求解GCD与LCM循环求解,最后的就是结果。AC代码#include <bits/stdc++.h>using namespace std;using ll = long long;inline ll LCM(ll a, ll b) { return (a * b) / __gcd(a, b);}int main() { int n; ll m; while (cin >> n >
2020-12-10 20:03:46
148
原创 Accepted Necklace HDU - 2660
Accepted Necklace HDU - 2660WAwa了两发又双叒叕是因为没读清楚题我裂开AC代码好家伙一手最low的dp竟然过了,我还一直不敢交hhhh#include <bits/stdc++.h>using namespace std;int const N = 2000;int dp[30][N][30];int main() {#ifndef ONLINE_JUDGE freopen("input.txt", "r", stdin);#en
2020-12-10 17:47:13
104
原创 The Doors POJ - 1556
The Doors POJ - 1556判断线段相交注意,判断线段相交与判断直线与线段相交完全不一样呀。快速排斥实验:若最小分别完全包含两条线段的矩形相交,则必然有其中任意一方的横/纵坐标的最大值大于另一方的最小值;跨立实验:若两条线段相交,则可根据叉乘判断;AC代码#include <cstdio>#include <cmath>#include <algorithm>using namespace std;int const INF =
2020-12-10 09:42:05
102
原创 Intersecting Lines POJ - 1269
Intersecting Lines POJ - 1269判断两直线的位置关系判断平行:两直线的向量叉乘为0判断共线:在1的基础上,取一直线上一点与另一直线上一点构成向量后与一直线的向量叉乘为0判断相交并求得交点坐标:不满足1、2的条件下,求出直线上一包含交点的线段与该线段上某一端点到交点的比例系数,在比例系数的基础上求得交点。AC代码#include <iostream>#include <cmath>using namespace std;struct
2020-12-08 21:10:35
170
原创 Segments POJ - 3304
Segments POJ - 3304直线与线段相交当线段的两个端点都在直线的左侧时,二者不相交,此时线段的两个端点分别和直线做叉乘,二者乘积必为正。否则,线段的两个端点有两种情况:1. 存在一个端点在直线上; 2. 线段的两个端点分别位于直线两侧。排除掉上文提到的不相交的情况即可推得二者相交。WA 代码直线与线段相交的条件错误导致WA#include<iostream>#include<cstdio>#include<cmath>#include<
2020-12-08 10:52:35
113
原创 POJ - 2318 TOYS
POJ - 2318 TOYS叉乘/点乘叉乘:x1∗y2−x2∗y1x1 * y2 - x2 * y1x1∗y2−x2∗y1, 产生一个与原向量垂直的向量。点乘:x1∗x2+y1∗y2x1 * x2 + y1 * y2x1∗x2+y1∗y2,产生一个数量,代表一个向量在另一个向量上的投影长度。AC代码#include <iostream>#include <vector>using namespace std;typedef pair<int, int>
2020-12-07 22:56:57
162
原创 Gym - 101635J - Frosting on the Cake
Gym - 101635J - Frosting on the CakeTLE代码画面:我天真地以为不能再优化了,自信地交了上去。#include <bits/stdc++.h>using namespace std;using ll = long long;int main() { ios::sync_with_stdio(false); int n; cin >> n; vector<ll> w(n + 1, 0), l(n
2020-12-05 22:41:37
133
原创 POJ 3279 Fliptile
POJ 3279 FliptileWA代码及优化就一个错误,很是憨批。#include <iostream>#include <cstdio>#include <string>using namespace std;int const N = 20;int g[N][N];int turn[N][N];int tmp[N][N];int fin[N][N];int n, m;int f[4][2] = { {0, 1},
2020-12-05 11:18:14
148
原创 FZU 2150 Fire Game
FZU Fire Game题意一张图,两个起点, 遍历其中所有的#点最少需要多少步。TLE代码及其中可以优化的点#include <iostream>#include <cstdio>#include <queue>#include <vector>#include <algorithm>#include <cstring>using namespace std;//#pragma GCC optimize(2
2020-12-04 12:31:45
144
原创 Codeforces #680 Div2-C. Division
题目链接1445C题解题意找一个最大的整数x满足 pmod x==0p\mod x == 0pmodx==0 && xmod q≠0x \mod q \neq 0xmodq=0.思路若p % q != 0,则p即为所求。否则p % q == 0,通过分解因数我们可以得到:q=m1∗m2q = m_1*m_2q=m1∗m2 以及 p=m1∗m2∗m3p = m_1*m_2*m_3p=m1∗m2∗m3,其中m1、m2、m3互质。我们所求的x必然是p有q没
2020-11-05 21:06:50
148
原创 932E-TeamWork 二项式定理+求导/DP
题目链接932E题解题意求 ∑i=0n(ni)∗ik.\sum_{i = 0}^{n} \begin{pmatrix} n\\i\\\end{pmatrix} * i^k.∑i=0n(ni)∗ik.思路f(x)=(1+x)n=∑i=0n(ni)∗xif(x) = (1 + x)^n = \sum_{i = 0}^n\begin{pmatrix} n\\i\\\end{pmatrix} * x^if(x)=(1+x)n=i=0∑n(ni)∗xixf′(x)=∑i=0n(ni)∗xi∗ix
2020-11-01 18:49:44
307
原创 B-GT‘s Dream “科林明伦杯“哈尔滨理工大学第八届程序设计竞赛
题目链接GT’s Dream题解思路两个操作,对于第一个操作——合并,需要使用并查集;对于第二个操作——查询,使用树状数组。我们使用树状数组维护一个前缀和。数组下标表示人数,元素表示在树状数组的意义下(其本质并非前缀和),小于等于该人数的帮派个数。当我们需要查询第k个帮派的人数时,利用树状数组求和函数sum,二分地在树状数组中查询。查询的初始区间为[1, n]。若求和函数的返回值大于等于k,则说明应该在[l, mid]中查询,否则应在[mid, r]中查询。由于这样的查询结果是第k小的帮派人数(
2020-11-01 12:03:04
184
原创 GYM MaratonIME plays Chess 模拟
题目链接GYM101744D题解题意给出一个棋盘,上面分布着许多棋子,判断能否用自己的任意一个棋子在一步之内吃到指定的对面的棋子。思路模拟!还是有很多可以回味的地方滴。输入方面可以看出棋盘的[0, 0]位置是在左下角的,为了方便处理我们可以倒着存图;读题细节方面注意p只能走一步而不是整个对角线;骑士的八个方位是不会受到除了出界之外的阻挡的;国王可以走八个方位。代码逻辑:存储小写字母和大写字母的位置。小写字母会被小写字母阻挡且不能到达该小写字母的位置,也会被碰到的
2020-10-29 13:41:09
254
原创 GYM MaratonIME plays Nim 交互博弈
题目链接GYM101744题解题意两堆石子,人机博弈。思路先判断是否有0,有的话直接把另一个取完。没有的话取多的那部分,让两堆石子数量相同,之后对称博弈就好。AC代码#include <bits/stdc++.h>using namespace std;int main() { int x, y; cin >> x >> y; if (x == 0 || y == 0) { if (x == 0) {
2020-10-28 20:24:15
137
原创 ACM-ICPC 2018 南京赛区网络预赛 SUM
题目链接A1956题解题意求∑i=1nf(n)\sum_{i = 1}^{n}{f(n)}∑i=1nf(n), 其中 f(n)f(n)f(n) 表示满足 n=abn = abn=ab 的a、b的数量,其中a与b是非平方因子,若a与b不相等则 n=abn = abn=ab 与n=ban = ban=ba 算作两种。思路计算 ∑i=1nf(n)\sum_{i = 1}^{n}{f(n)}∑i=1nf(n) 等价于求满足 ab≤nab \leq nab≤n 的a、b的数量。我们可以通过枚举a来计算
2020-10-26 23:09:38
119
原创 2020 辽宁省大学生程序设计竞赛 最长回文串
题目链接8440F题解题意对于给出的若干个回文串,经过四次题目所给的操作后求出最长的回文串。思路要构成一个最长的回文串,如果可以找到一个字符串本身是回文串且在题目所给的字符串中该字符串有且仅有一个,那么这个字符串一定位于回文串中且位于中间。回文串中其他的每个不同的字符串必然各有偶数个。所以我们先求出每一种不同的字符串的数量,各取出最大偶数个之后判断剩余的字符串中是否有回文串即可。AC代码#include <bits/stdc++.h>using namespace std;
2020-10-26 20:38:33
232
原创 LeetCode 5545.无矛盾的最佳球员 Best Team With No Conflicts
题目链接LC5545题解题意找出若干球员,其分数之和最大且其中不存在年龄较小球员的分数大于年龄较大球员的分数的情况。思路又到了我们最喜欢的动态规划环节了!构建结构体存储分数和年龄,按分数进行排序,将分数大的放在前面或者按年龄进行排序。后续证明排序的必要性;设 dp[i]=以i结尾且选择i的情况下可获得的最高分数.dp[i] = 以 i 结尾且选择 i 的情况下可获得的最高分数.dp[i]=以i结尾且选择i的情况下可获得的最高分数.可以得到状态转移方程:dp[i]=max(dp[i],sc
2020-10-19 15:52:46
1944
原创 LeetCode 5544. 执行操作后字典序最小的字符串 lexicographically-smallest-string-after-applying-operation
题目链接LC5544题解题意两种操作:轮转,取第b个字符作为第一个,之前的字符在保持相对顺序不变的情况下补到字符串末尾。累加,奇数位的字符加a,数字超过9就会变成0。求最小字典序的字符串。思路枚举所有可能的情况,取一个最小的。在初始字符串轮转i次的情况下,对字符串的奇数位累加j次,若可以使得字符串的偶数位变成奇数位,即b是奇数的情况下,再使得字符串的偶数位累加k次(这里可以对偶数位累加是因为若b是奇数,则我们可以保证字符串的字符总体不变的情况下改变字符的顺序使得奇数位移动到偶数位)。
2020-10-19 14:33:41
341
原创 LeetCode 91.解码方法
题目链接LC91题解题意求一共有多少种解码方式。思路分类讨论并dp。设 dp[i]=到第i个字符为止,共有多少种解码方式dp[i] = 到第 i 个字符为止,共有多少种解码方式dp[i]=到第i个字符为止,共有多少种解码方式 。若第i个字符可以和第i-1个字符组合,则 dp[i]=dp[i−1]+dp[i−2]dp[i] = dp[i - 1] + dp[i - 2]dp[i]=dp[i−1]+dp[i−2]否则 dp[i]=dp[i−1]dp[i] = dp[i-1]dp[i]=dp
2020-10-09 19:38:14
93
原创 HDU 4945 2048
题目链接HDU4945题解题意给出若干个数字,从其中挑出两个相同的数字则可进行合并,合并后产生值为二者之和的新数字且原有两数字消失。求能够凑出2048的集合的数量。思路动态规划。我们规定:有效数字为有能力对凑出2048有贡献的数字。要凑出2048,则有效数字只能从 2i2^i2i 中进行选择。设 use[i][j]=从2i中挑选j个的方法的数量use[i][j] = 从2^i中挑选j个的方法的数量use[i][j]=从2i中挑选j个的方法的数量,dp[i][j]=凑出数字k属
2020-10-07 21:02:30
122
原创 Gym 102576 G - Invited Speakers
题目链接102576G题解题意n 个桌子,n个房间,分别连接桌子和房子,保证n条路线之间没有交叉。求n条路线。思路将点按照横坐标排序,两两配对,记录最高点,最低点和最左端。将配对好的点画圈连接,每个圈有六个点,保证该圈的最高点高于之前的最高点,最低点低于之前的最低点,最左端左于之前的最左端。转圈圈~~AC代码#include <bits/stdc++.h>using namespace std;#define INF (0x3f3f3f3f)int T;int
2020-10-05 16:37:00
221
原创 Gym 102576L Wizards Unite
题目链接102576L题解题意n 个箱子,k把银钥匙,1把金钥匙,每个箱子需要一定时间打开,只有金钥匙可以多次使用,求最短时间。思路按箱子打开的时间排序后,用银钥匙开启耗时较多的k个箱子,用金钥匙开始耗时较少的剩余箱子,比较一下银钥匙开启的箱子中耗时最久的和金钥匙开启所有箱子所用的时间,较长的时间即为所求结果。AC代码#include <bits/stdc++.h>using namespace std;using ll = long long;int const N =
2020-10-05 16:12:27
190
原创 Codeforces #310(Div 1)C. Case of Chocolate
题目链接CF555 C题解题意一个矩阵一样的巧克力,取沿着副对角线切开后的上半部分(包含副对角线)。开始沿着行/列吃巧克力,如果没有阻挡,就可以一口气吃完这一行/列。一旦被吃的巧克力在下一次吃的那一行/列的路径上,就会形成阻挡,导致提前结束(原谅我蒟蒻的归纳能力)。求每一次吃的巧克力的数量。思路分情况讨论一下:假设所吃的行/列都没有被吃过:第i列第j行横向吃:找到i列左侧最近的一个被吃的一列k,判断k的终点(吃到的最后一块巧克力的位置)的行坐标m与吃的这一行的行坐标j的关系:如果m小
2020-10-04 20:03:23
933
2
原创 Codeforces 2020 ICPC 1425E Excitation of Atoms
题目链接1425E题解题意模拟!是情况超级多的模拟!思路分情况讨论。AC代码#include <bits/stdc++.h>using namespace std;using ll = long long;#define INF (0x3f3f3f3f)int const N = 1e5 + 10;int n, k;ll a[N], d[N];ll suf[N];ll pre[N];int minval, minvalpos;int mincost,
2020-10-01 22:09:51
263
原创 Codeforces 1425F Flamingoes of Mystery
题目链接1425F题解题意这是一道神奇的交互题。大小为n的数组,你有n次询问的机会,oj会回答你的每次询问,最后需要输出该数组。思路因为有n次机会,需要得到n个数字,那么我们必然在每一次询问中得到至少一个元素。从N的取值范围得知最少有3个,我们可以先得到这三个,然后通过之后每一个元素的前一个得到该元素。AC代码#include <bits/stdc++.h>using namespace std;int const N = 1e3 + 10;int ans[N];i
2020-10-01 18:39:07
247
原创 Codeforces 1425A Arena of Greed
题目链接1425A题解题意一堆石子,数量为奇数时可以取1一个,数量为偶数时可以取一半。玩家先手,求最多可以获取的石子数量。思路为了获取最多的石子数量:数量为奇数时:只能取1个,然后对手进入情况2,我们只能取剩下的;数量为偶数时:为了尽可能最大化所能取的石子数量,我们尽可能使得对手只能取1个,即使得对手取时数量为奇数;同时使得我们取石子时数量为偶数。为了实现这个情况,我们判断一下当前石子数量的一半是否为奇数,如果是,我们就取一半;如果不是,我们就取一个,对应的,对手也只能取一个,之后所得
2020-10-01 17:51:52
1338
2
原创 2019 CCPC 秦皇岛 Invoker
题目链接Invoker题解题意给出十个技能,每个技能需要有三个元素才能释放,其中三个元素可以任意排列。玩家手中最多存储三个元素,若想获取新的元素则需要放掉最开始的时候获得的元素,释放某个技能需要使用一个R和三个对应的元素。假定玩家拥有无限个R且R不占位置。给出一个技能数组,求所需最少的元素数量。思路动态规划!每个技能有三个元素,三个元素可以构成六个排列,利用这六个排列进行动态规划,找到所需最少的元素数量后加上每次释放技能时要用的R,即为所求。注意该题多组输入。AC代码#include&
2020-09-30 16:56:05
150
原创 CodeForces #672 Div2 1420D Rescue Nibel!
题目链接1420D题解题意给出n段区间,从中找到k个区间存在交集,每个区间可以被选任意次,求这样的找法有多少种。思路我们给区间左端点赋值1,给区间右端点赋值-1, 排序后遍历即可求得在当前节点之前有多少个区间和该节点所在的区间有交集。题目要求找到k个区间,用一下组合数就好(注意取模)。AC代码#include <bits/stdc++.h>using namespace std;//#pragma GCC optimize(2)#define IO ios::sync_
2020-09-29 21:03:03
130
原创 Codeforces #674 Div3 1426C Increase and Copy
题目链接1426C题解题意通过在数组末尾添加一个数组内已有的数字或者给数组中某一个数字加1的操作使得数组值等于n,求最小的操作数。思路写几个例子然后就可以发现取到中间的时候就可以得到最小的操作步数。(其实和小学时候的已知矩形面积求最小边长一样。举个例子421 42 : 412 21 : 40........AC代码第一版最后几分钟想到了方法,然后就模拟了出来,不过晚了1s。。。。 #include <bits/stdc++.h> using nam
2020-09-28 23:27:06
150
原创 Codeforces #672 Div2 1420B. Rock and Lever
题目链接1420B题解题意找到数组中满足i<ji<ji<j 且 (ai(a_i(ai & aj)a_j)aj) ≤(ai⨁aj)\leq (a_i \bigoplus a_j)≤(ai⨁aj)的pair的数量。思路当aia_iai和aja_jaj的二进制表示的最高位位置相同且为1时,可以满足上述条件。最高位的1相与之后得到1;最高位的1异或之后得到0(异或可以看作不进位的加法)。求数量可以在观察之后可以得出等差数列的做法。AC代码#includ
2020-09-28 22:43:24
195
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人