
思维题
夏水天国
需要学的还有很多
展开
-
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 · 167 阅读 · 0 评论 -
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 · 1158 阅读 · 0 评论 -
牛客练习赛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 · 380 阅读 · 0 评论 -
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 · 164 阅读 · 0 评论 -
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 · 127 阅读 · 0 评论 -
第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 · 572 阅读 · 3 评论 -
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 · 239 阅读 · 0 评论 -
Educational Codeforces Round 113C Jury Meeting(求组合数)
题目大意:给定一个数组,从左往右对数组中每个数减1,如果当前数为0就不对其操作对这个数组有多少种排列方式,使得一个数不会被连续减两次分类讨论:1:如果数组中最大的数远远大于其他数(最大数–次大数>=2),就没有任意一种排列方式满足题意2:如果数组中的最大数>=2(最大数不止一个)那么无论怎么排列都是满足题意的,答案就是数组数量的阶乘3:存在一个最大数,至少存在一个次大数使得最大数-次大数==1此时判断有哪些非法排列情况:显然,当次大数全部位于最大数的左边时,该排列是非法的不理解的原创 2021-09-10 17:19:09 · 98 阅读 · 0 评论 -
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 · 166 阅读 · 0 评论 -
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 · 469 阅读 · 1 评论 -
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 · 106 阅读 · 0 评论 -
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 · 144 阅读 · 0 评论