- 博客(99)
- 收藏
- 关注
原创 (记录)使用QT的Qodbc连接sqlserver2008
1:创建工程,创建时Base Class选择Qwidge,创建号后,点开后缀为.pro的文件,将QT += core gui修改为QT += core gui sql2:在sql server Management中选择好数据库,右键,新建登陆名gcw记得要关掉强制密码策略,然后打开这个界面左侧的用户映射现!先在上面勾选你想要连接的那个数据库,随后还需要勾选下方的这两个打开状态那一栏,保证是这样的创建好后,打开ODBC数据源,用windows搜索功能就能找到点击添加
2022-05-29 14:10:16 1527
原创 HH的项链(可持久化线段树解法)
想要知道[L,R][L,R][L,R]区间中不同的数是多少设w[i]w[i]w[i]是区间中第iii个数xxx上一次出现的位置如果w[i]<Lw[i]<Lw[i]<L,那么答案+1我们用[L,R][L,R][L,R]这一段的w[i]w[i]w[i]来建立一个权值线段树,然后问询这个权值线段树中[1,L−1][1,L-1][1,L−1],就可以得到答案但问询很多,显然我们不能一次问询建一次线段树。所以可以用可持久化线段树来实现同时为了防止出现0,所以w[i]w[i]w[i]均+1
2022-04-22 11:50:27 360
原创 第46届ICPC 东亚洲区域赛(澳门)(正式赛) A C F K
A:思维任意找一条路,如果正着走上坡的次数比下坡多,那么反着走就符合条件了#pragma GCC optmize(2)#include <bits/stdc++.h>#define endl '\n'#define int long longusing namespace std;const int N = 100;int a[N][N];int n;bool st[N][N];int mid = 0;vector<int>g;void solve() {
2022-04-03 20:44:57 1621 1
原创 Codeforces Round #734 (Div. 3) D1. Domino (easy version)(分类讨论)
题目大意:给出一个n×mn \times mn×m的棋盘,需要用1×21\times21×2的格子去填满它,并且要保证有kkk个格子是横放,判断是否可能1:n,mn,mn,m均为偶数若kkk为偶数,我们可以把棋盘划分为若干个2×22\times22×2的方格,任意两个1×21\times21×2的格子(无论横放还是竖放)都能组成这样一个方格。显然,这是成立的。若kkk为奇数,每一列中,属于竖放的单元格子数量为偶数,所以属于横放的单元格子数量也是偶数。但由于横放的数量是奇数个,显然这是不可能的。2:
2022-03-07 22:03:46 152
原创 2020 China Collegiate Programming Contest, Weihai Site.L Clock Master (数论,背包问题)
原题链接题目大意:购买一个齿轮齿数为T的种需要T元,齿轮齿数为T的种可以表示T种时间状态。现给B元的预算,要求购买一些种,使得他们能表示的不同状态最多。一开始,这些种都指向0。一个3齿种与4齿种可以有12种状态。但两个3齿种与一个4齿种也只有12种状态。所以,想要组合数量更多,应该选择不同齿数的种。如果选择的种的齿数为a1,a2,a3,...,ana_1,a_2,a_3,...,a_na1,a2,a3,...,an,那么组合数就是最小公倍数lcm(a1,a2,a3,...,an)lcm(
2022-02-18 17:22:49 151
原创 重庆交通大学2020级程序设计方法期末考试 题解
A 要好的朋友题面【问题描述】某个班有n名学生,某两个学生可能是“要好”关系。给定n名学生之间的要好关系,输出每个学生有几个要好的朋友。【输入形式】输入文件中包含多个测试数据。每个测试数据描述了一个班级,其中第1行为两个整数n和m,n为学生人数,m为“要好”关系数,2≤n≤50,1≤m≤1225,学生序号为1~n;接下来有m行,每行为两个整数u和v,表示学生u和v是要好关系,要好关系不会重复出现,且每个学生和自己不是要好关系。测试数据一直到文件尾。【输出形式】对每个测试数据,输出一行,为n个整
2022-01-04 12:44:59 931
原创 The 2021 ICPC Asia Nanjing Regional Contest H.Crystalfly(树上DP)
cjb的题解有一个容易被忘记的坑点:在我们锁定最大点w,然后对其他点进行第二种决策的计算时,要记得还要反过来拿其他店对w点进行一轮第二种决策的计算!!!还有别忘了if(i==fa)continue!!!另外vector里的pair的second是没有用的,可以忽略#include <bits/stdc++.h>#define int long long#define endl '\n'using namespace std;int n;const int N = 1e5 +.
2021-12-16 15:35:48 1123
原创 第 46 届 ICPC上海站I Steadily Growing Steam 蒸蒸日上(背包DP)
若⼲物品具有体积Ti和价值Vi,选出⾄多K件物品将其体积翻倍,然后选出若⼲物品并将其分为体积和相同的两堆,问选出的物品价值之和最⼤是多少。把分给alice的物品看作正值,把分给bob的物品看作负值。设一个DP[i][j][k]表示在前i个物品中选,最多用j次技能,alice与bob物品价值的差值。由于Ti<=13,所以K最大为2600,所以做一个偏移处理(防止出现负数)第一维也可以用滚动数组减少空间有个很奇妙的滚动数组的实现方法开F[2]用F[i&1]表示当前层,用F[i&
2021-12-04 15:40:34 697
原创 2021ICPC上海G Edge Groups(树上DP)
考虑一个菊花图:1号点为中心,其他n-1个点都与1号点直接相连。计算两个边分成一组,有多少分组方法:答案是1*3*5*7*…*n证明过程现在来考虑一个普通图:假设A点是B点的父亲B点有N个儿子(不包含父亲),假设全部都是叶子节点1:如果N是偶数,那么将这些连接叶子节点的边两两分组,它有1 * 3*5*7 … * N (1-N中的奇数相乘)种分组方法2:如果N是奇数,它同样有1 * 3 * 5 * … * N(1到N中的奇数相乘)种分组方法,而且必定会剩下一个边无法配对,所以这个剩下的边只好与
2021-12-02 10:36:42 782
原创 重庆交通大学第八届校赛题解
A:不会B:签到题C:DPDP[N][M]表示前N个人取前M个糖果(M>N),在满足每人取得最低糖果数量条件的情况下最小化(取得的糖果数量最多的人)所分到的的糖果的数量if(sum>=最小值){ dp[i][j]=min(dp[i][j],max(dp[i-1][k-1],sum));}i代表第i个人j代表第i人取得的最后一包糖果的位置k代表第i人取得的第一包糖果的位置sum代表从j到k糖果权值总和#pragma GCC optimize(2)#include <
2021-11-28 17:56:27 817 3
原创 Codeforces Global Round 17 A-C (思维题,模拟,二分)
A:思维题,观察后很容易发现最难猜的情况是所有点都被电脑选定了(也就是不会提供额外信息)所以以下的所有分析都是基于所有点都是可疑点当n==1&&m==1,显然不需要探测就能知道目标点在哪当n==1||m==1我们只需要探测这一条线上的一段,即可得知目标点其他情况:均为2,只需要将两个点放在矩形的左上角与右下角,此时两圆相接确定一个点#pragma GCC optimize(3,"Ofast","inline")#include <bits/stdc++.h>#de
2021-11-25 10:45:00 479
原创 2021威海D Period(哈希表)
感觉这题最大的困难在于理解period这个单词是什么意思。。。。原文是A integer number T is a period of a string s if and only if 1≤T<|s| and s[i]=s[i−T] for every i∈(T,|s|].翻译过来就是找到一个最大的K,使得[1,k]与[n-k,n]这两段字符串相同对于匹配相同字符串很容易想到用哈希表+前缀和实现而题目中将一个字符改成’#‘说白了就是最长只能找到’#'前面这个位置(因为其他字符都是小写字母
2021-11-25 10:28:45 543
原创 牛客练习赛91BC 魔法学院(线段树/差分/并查集加速暴力)
B题,数据范围1e5,范围较小。区间修改,区间查询,很明显的线段树+懒标记板子,套一块模板即可#include <iostream>#include <bits/stdc++.h>using namespace std;const int N = 1e5 + 10;int n, m, w[N];struct node { int l, r; int sum, add;} tr[4 * N];void pushup(int u) { tr[u].sum =
2021-11-13 14:20:05 291
原创 Shuffle Cards (splay)
题目大意:给定一个数组1 2 3 4 5…有m次操作,每次给定一个p和s,然后将数组中[p,p+s-1]中的数放到数组最前方。最后输出操作完后的顺序实际上这个操作转化成可以分成三次翻转假设p=2,s=3,1:翻转[1,p+s-1]4 3 2 1 52:翻转[1,3]2 3 4 1 53 翻转[4,4]2 3 4 1 5形式化来讲就是int l = 1, r = p + s - 1; rev(l, r); // rev(l, s); rev(s + 1, r);显然,这
2021-11-12 16:17:33 187
原创 第十三届河南省赛J甜甜圈 (树状数组 )
原题有个小点:吃甜甜圈不算一个步骤有题易得,最优的步骤是确定了的:每次就找到最大的值,把其上的所有甜甜圈移动到另一边,然后吃掉最大的为了加速这个过程,我们考虑将两堆甜甜圈顶部对接这样,样例中的两组甜甜圈1 4 52 7 3变成了5 4 1 || 2 7 3将7吃掉的过程就变成了把那个竖杠移动到7的前面5 4 1 2 ||7 3,斜杠变化前后中间隔着1个非零数(2)随后7被吃掉,把7设为0,现在是 5 4 1 2 || 0 3 花费步骤1接下来要吃5,吃掉后变成0 || 4 1 2 0
2021-11-01 17:51:35 128
原创 Codeforces Round #749D Omkar and the Meaning of Life (思维题,并查集)
题目大意:有一个长度为n的无重复元素的序列A,最多可以执行2n次询问,每次询问由一个?加上一个长度为n的序列B。spj会让AB对位相加,然后返回由新序列中最小的索引K,要求K索引所对应的值在新序列中出现不止一次,若找不到,就返回0设n=5,可以询问例如 1 1 1 1 2 这样的数据,此时返回的数值就是比第五位数大1的那个数的位置假设序列A是3 2 1 5 4,我们询问1 1 1 1 2,得到回复4,即4号位比5号位大1我们询问1 1 1 2 1,得到回复 0,即4号位是最大的询问 1 1 2 1
2021-10-19 11:34:16 156
原创 RSA解密 题解(Pollard_Rho+MR素数检验+扩展欧几里得+快速幂+__int 128)
【问题描述】RSA是一种经典的加密算法。它的基本加密过程如下。首先生成两个质数p, q,令n=p * q,设d与(p-1) * (q-1)互质,则可找到e使得d*e除(p-1) * (q-1)的余数为1。n, d, e组成了私钥,n, d组成了公钥。当使用公钥加密一个整数X时(小于n),计算C = Xd mod n,则C是加密后的密文。当收到密文C时,可使用私钥解开,计算公式为X = Ce mod n。例如,当p=5, q=11, d=3时,n=55, e=27。若加密数字24,得243 mo
2021-10-16 20:48:05 514
原创 2018牛客多校5G max
给出两个正整数c,n,你需要找到一对整数(a,b),满足1<=a,b<=n,并且a和b的最大公约数是c。你需要使a和b的积最大化。首先判断解不存在的情况:如果c>n那么解就不存在如果c==n很显然a,b就是n,答案是nn设x是小于n的情况下的c的最大倍数,显然,x与x-c的最大公约数是c,那么想要让ab最大,就可以让他们分别去x与x-c通过(n/c)*c可以快速算出小于n的情况下的c的最大倍数#include <bits/stdc++.h>#define int l
2021-10-05 21:29:15 104
原创 第23次CCF计算机软件能力认证 A B(思维题X2)
(还没找到题面,代码是靠记忆写出来的,也没地方交题不知道对没对,大体思路对了就行)A题:假设有一个数组a[N],构造一个数组b[N]使得b[i]是a[1]到a[i]中的最大值,现给出b数组,让你构造a数组,a数组可能性有很多,只需要数组总和最大的a数组的值和总和最小的a数组的值其实这题面向样例编程就能解出来了,但其实还是用的贪心思想b数组就像是对a数组每一位上限的一个限制想要构造出来的a最大,就是让a顶着b的上限去搞(说白了就是b)想要构造出来a最小,只需要在每次上限发生变化时,在那个位置放一个
2021-09-19 22:56:41 554 3
原创 Codeforces Round #743C Book(搜索)
#include <bits/stdc++.h>using namespace std;const int N = 2e5 + 10;int n;vector<int>g[N];//读完i号书后可以解锁哪些书int d[N];//一个书的前置数量int f[N];//某本书读到第几轮才学会void solve() { cin >> n; for (int i = 1; i <= n; i++) g[i].clear(), f[i] = 0
2021-09-19 10:34:31 117
原创 Codeforces Round #743B Swaps(思维)
cf变成oi赛制了想要让a数组比b数组小,其实只需要让a数组第一位比b数组小由题目数据特性可知,如果对a,b两数组按值大小进行排序,那么在同一下标下,a数组必定是小于b数组的所以只需要开一个结构体,储该点的值和原本位置。然后按值的大小sort一遍,然后找出下标最靠前的那一对就好#include <bits/stdc++.h>#define int long longusing namespace std;const int N = 1e5 + 10;int n;struct
2021-09-19 10:09:49 221
原创 csp202104-4 校门外的树(60分)
满分的做法设f[i]为前i个障碍物所能生成的最多可能性设 cnt[i][j]为从第i个障碍物到第j个障碍物的可行方案数想要求cnt[i][j]只需从位置i枚举所有间隔的可能性,看是否能在不触碰到i,j之间的障碍物的情况下到达j很显然,如果知道了前3个障碍物生成的最多可能性并暴力处理cnt数组,那么当求f[4]时f[4]=f[1]*cnt[1][4]+f[2]*cnt[2][4]+f[3]*cnt[3][4];由于暴力处理cnt时间复杂度过大,所以只有60分#include <bits/
2021-09-15 22:58:59 345
原创 AcWing 344. 观光之旅(floyd求最小环)
原题开始口胡:用类似dp的方法,对图中所有环进行分类分类标准是环中编号最大的点for(int k=1;k<=n;k++)由floyd的原理可知当floyd的第一重循环执行到K时(还没开始执行K),所有路径都是进过1到k-1号点所形成的最短距离当进行到K时,枚举i和j,在之前的计算中包含i,j的环的距离是d[i][j]+d[j][i],先插入K点,使式子变成w[i][k]+w[k][j]+d[j][i]取两者最小值,当把所有i,j枚举完,就能求出第K类环的最小值#include <b
2021-09-13 21:54:01 128
原创 Educational Codeforces Round 113C Jury Meeting(求组合数)
题目大意:给定一个数组,从左往右对数组中每个数减1,如果当前数为0就不对其操作对这个数组有多少种排列方式,使得一个数不会被连续减两次分类讨论:1:如果数组中最大的数远远大于其他数(最大数–次大数>=2),就没有任意一种排列方式满足题意2:如果数组中的最大数>=2(最大数不止一个)那么无论怎么排列都是满足题意的,答案就是数组数量的阶乘3:存在一个最大数,至少存在一个次大数使得最大数-次大数==1此时判断有哪些非法排列情况:显然,当次大数全部位于最大数的左边时,该排列是非法的不理解的
2021-09-10 17:19:09 93
原创 Codeforces Round #742C Non-Decreasing Dilemma(思维题)
题目大意:正常的加法进位:1+9=10,99+1=100alice的加法进位1+9=100,99+1=190正常进位会把进位的数加在前面一位,alice会把数加在前面两位现在给一个数n,要求你找到有多少不同的数对以alice的加法相加时,结果为n可以注意到,正常的加法是将奇数位进位到偶数,偶数位进位到奇数位但alice的加法是奇数位进位到奇数位,偶数位进位到偶数位也就是说,偶数位与奇数位是互不影响的所以可以把一个数按奇偶数位进行拆分,分别计算拆分出的两个数有多少个组合方式,一个k的组合方式有
2021-09-07 21:29:20 159
原创 Codeforces Round #742E Non-Decreasing Dilemma(线段树)
题目大意:给一个数组,有两种操作1:改变数组中的一个值2: 求区间中成非递减的子序列有多少个刚开始拿到题感觉:这不就是个板子吗?然后这道板子题就卡了我两天,直到看了别人的代码才知道错哪儿了节点需要维护的信息:左右区间范围当前区间中,合法子序列的数量包含左端点的最长合法子序列的长度(llen)包含右端点的最长合法子序列的长度(rlen)让我们合并两个区间的时候,需要分情况讨论如果左儿子最右端的数大于右儿子最左端的数:父区间的合法子序列的数量就是两个子区间合法子序列的数量如果左儿子最
2021-09-07 21:08:37 127 2
原创 hdu7116 lowbit (线段树+lowbit的性质)
大意:两种操作1给区间内所有ai加上lowbit(ai)操作2:区间问询总和lowbit的性质:lowbit(ai)会取ai二进制下的最高位的1,例如5的二进制是101,lowbit(5)=1,4的二进制是100,lowbit(4)=4;用以下代码可以快速算出lowbitint lowbit(int x) { return x & (-x);}另一个性质:一个数最多进行加log次lowbit,二进制就会变成1000……000的形式,此时再加lowbit就是这个数乘2.用线段树+懒.
2021-09-05 10:52:50 423
原创 AcWing 918 软件包管理器 (树链剖分+线段树)
Linux 用户和 OSX 用户一定对软件包管理器不会陌生。通过软件包管理器,你可以通过一行命令安装某一个软件包,然后软件包管理器会帮助你从软件源下载软件包,同时自动解决所有的依赖(即下载安装这个软件包的安装所依赖的其它软件包),完成所有的配置。Debian/Ubuntu 使用的 apt-get,Fedora/CentOS 使用的 yum,以及 OSX 下可用的 homebrew 都是优秀的软件包管理器。你决定设计你自己的软件包管理器。不可避免地,你要解决软件包之间的依赖问题。如果软件包 A 依赖
2021-09-03 14:09:53 148
原创 2021ccpc网络赛06(hdu7106) Function(数学+三分)
原式:f(x)=A(x^2)*g(x)+Bx^2+C*x*(g(x)^2)+D*x*g(x)经过变换后f(x)=(A*g(x)+B)*x^2+(C*(g(x)^2+D*g(x))x假设,我们把g(x)看作一个常数那么原式就会变成Nx^2+Mx就成了一个一元二次方程但是,g(x)是会随着x的变化而变化的但值得注意的是:由于1<=x<=1e6所以1<=g(x)<=54 (g(99999)=54)所以我们可以把x根据其g(x)的值分成54个互相独立的部分,每个部分
2021-08-29 20:15:50 458 1
原创 2021百度之星复赛03 Subtraction (贪心)
#include <bits/stdc++.h>#define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)using namespace std;typedef long long ll;const int N = 2e5 + 10;int b[N], p[N];vector<int>g[N];ll ans, bas;int n;int dfs(int u, int fa) { vector&l.
2021-08-23 09:55:47 210
原创 第三次训练赛题解
题目背景998244353最优美的性质莫过于它是个完美恶臭数:998244353=( 114514 * ( 54-1+114 * (1+145+1+4) ) ) + ( 4+11451 * (4-1-15+14) ) + ( 11+4154 + (141+541) ) + (4-1-15+14)之所以称为完美,如果您仔细观察,您会发现每一个括号里114514都出现了正整数次!今天,你需要用这个恶臭数进行一系列的复杂运算(或许?)题目描述米4达的替身名为"性感手枪",可以操纵子弹的飞行轨迹。一天在
2021-08-22 20:29:37 926 1
原创 2021百度之星复赛02 Add or Multiply 1 (第二类斯特林数)
#include <bits/stdc++.h>#define int long longusing namespace std;typedef long long LL;const int N = 3050, MOD = 1e9 + 7;int n, m;int f[N][N];int A[N];int mul(int a, int b, int c, int d) { int res = 1; res = a * b % MOD; res = res * c % M.
2021-08-22 11:15:53 87
原创 第二类斯特林数
{n,k}表示将n个两两不同的元素划分成k个非空子集的方案数注意:不需要排序,因为集合无序假设已知{n-1,k-1}和{n-1,k}同样的,有两种情况1:n单独作为集合,结果为{n-1,k-1}2:n放入之前的集合,结果为(k){n-1,k}性质:{n,0}=0{n,1}=1{n,n}=1{n,2}=2^(n-1)-1{n,n-1}=C(n,2){n,n-2}=C(n,3)+3C(n,4)第二类斯特林数有通项公式:{n,m}=(1/m!)*(k从0累加到m)(-1)^k * C(
2021-08-22 10:36:09 1246
原创 第一类斯特林数
将1到n划分成k个圆排列的方案数用类DP的方式去想,假设已经求出了1到n-1的方案数,那么第n个数可以放在哪:1:新生成一个圆排列,该圆排列仅有一个数n,方案数就是用1到n-1的排列出k-1个园时的方案数。2:不新生成圆排列,而是插入在原有的圆排列中。有很多的放置法:放在第一个圆排列第一个数后面,放在第一个圆排列第二个数后面,放在第二个圆排列第三个数后面etc,假设原本有M种排列方式,有N-1个数,那么新生成的方案数就是(N-1)*M,即(N-1)乘上(N-1)个点划分成K个圆的方案数结论:假设A是
2021-08-22 10:08:37 361
原创 程序自动分析 (离散化并查集)
原题需要离散化的并查集题,留作个笔记#include <bits/stdc++.h>using namespace std;typedef pair<int, int> PII;const int N = 1e5 + 10;int n, cnt;vector<PII>eqs;//可以相等的两个数vector<PII>uneqs;//不可相等的两个数unordered_map<int, int> H;int p[N * 2];
2021-08-20 19:53:11 80
原创 2021牛客多校5B Boxes (数学期望)
大意:给n个盒子,每个盒子里有一个有,为黑白的概率各为1/2,每打开一个盒子要花费w,或者获得一个提示,得知当前未开的盒子里黑球有多少,花费c,要求知道所有盒子中球的颜色的最低数学期望花费开盒子有两种开法:1:全开,花费为盒子权值之和2:在游戏开始时获得提示,此后在一整局里都能知道接下来还有多少黑球(如果开出白球,剩余黑球数量不变,开出黑球,剩余黑球数量-1)如果选择提示,有两种情况可以提前结束游戏:剩余黑球数量为0,或者剩余黑球数量等于当前剩余盒子数量首先对盒子的权值排序,保证最先开盒子的是权值
2021-08-19 20:01:50 97
原创 笔记 费马小定理
(a/b)%mod=a*pow(b,mod-2);例题:给定一个数组,多次问询,求区间乘积取余#include <bits/stdc++.h>using namespace std;const int N = 1e5 + 10;long long a[N], b[N], f[N];long long ans;long long mod = 1e9 + 7;int n, m;long long qmi(long long x, long long y) { long lon
2021-08-18 10:45:35 88
原创 2021牛客多校1G Game of Swapping Numbers (思维题)
开始补题QWQ题意:给两个数组AB,任选A中任意两个数交换,共进行K次,求结束后|a[i]-b[i]|总和的最大值易知:|ai-bi|=max(ai,bi)-min(ai,bi)所以可以让c数组取较大值,d数组取较小值c[i] = max(a[i], b[i]);d[i] = min(a[i], b[i]);此时ci>di,cj>dj当di>cj时|ci-di|+|cj-dj|=ci+dj-ci-dj交换di和dj时|ci-dj|+|cj-di|=ci-cj+di-
2021-08-18 10:22:27 98
原创 2021牛客多校10F Train Wreck (贪心,思维题)
题意,给一个堆,只支持push和pop,有n个点,每个点都有颜色(可能相同可能不同),现给出push和pop的顺序,让你分别push时放入哪个点,保证此次push后点组成的颜色序列与之前某次push后形成的颜色序列不同如果我们将push当作是创建一个新节点,pop是回溯到上一个节点的话,我们很容易将序列入 入 出 入 出 出 入 出构建成一棵树进过观察可发现,如果仅2,3的颜色相同:设1号颜色为红,23号为橙,4号为黄入 红入 红橙出 红入 红橙出 红出入 黄出可以看到第二行的
2021-08-17 16:19:12 134
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人