日常训练
文章平均质量分 94
WWL0702
这个作者很懒,什么都没留下…
展开
-
东北农业大学第九届程序设计竞赛 题解
啦啦啦,我现在已经能ak校赛啦,啦啦,一年没白学(大雾) A:DLK的魔法 分析:这题直接逆推,每次将当前数字尽量变成一个平方数,然后直接平方,直到1 思路:尽量少使用+1操作,就是最优方案,那么就是尽量多平方操作,那么逆推的时候,每次尽量造出平方数 代码: ll n,a,b,c; int main() { cin>>n; if(n<=2) cout<<n<<"\n"; else { do {原创 2020-11-25 22:28:08 · 526 阅读 · 0 评论 -
luogu P2486 [SDOI2011]染色 解题报告
P2486 [SDOI2011]染色 题目分析: 这题看似很诡异,求的不是不同颜色的数量,而是颜色段的数量,可是仔细一想,这不就是个区间合并吗,记录区间的左右端点颜色,当合并的时候,假如左儿子的右端点和右儿子的左儿子相同,总数-1,然后其他部分标准的树链剖分,直接粘了之前的代码,就把线段树的部分重新写了下 反思:查询操作的时候,想复杂了,其实一个flag标记一下当前是否旋转了即可,假如旋转了,就代表线段树查的是反的,合并的时候记得先交换下左右端点颜色即可,一开始写的老复杂了,又是记录端点,又是判断上一条链原创 2020-11-09 21:15:12 · 135 阅读 · 0 评论 -
树链剖分及进阶 边权化点权 luogu4315 luogu1505
树链剖分模板 点权 2遍dfs+线段树 #include <bits/stdc++.h> using namespace std; #define rep(i,a,n) for(int i=a;i<n;i++) #define per(i,a,n) for(int i=n-1;i>=a;i--) typedef long long ll; typedef double db; typedef pair<int,int> P; typedef vector<int&g原创 2020-11-04 19:15:45 · 327 阅读 · 1 评论 -
线段树题集--SPOJ GSS1~GSS8解题报告
GSS1 - Can you answer these queries I 第一题,主要处理不同区间里,最大值,从左边开始的最大值,从右边开始的最大值,总和 这4个点的合并即可,luogu之前做过和这题思路及其类似的就是我,这题也是线段树的题,不过侧重于维护区间连续1的长度,并且需要支持区间修改和区间查询,不过大概思路是可以借鉴的 那么回到本题,既然需要是查询某一段中最大的前缀和,那么就得想如何处理区间合并,假设现在左子区间和右子区间已经确定了最大前缀和,那这一段的最大前缀和,要么是左子区间的最大前缀和,.原创 2020-10-28 18:15:04 · 220 阅读 · 0 评论 -
Educational Codeforces Round 95 补题报告
A. Buying Torches 分析: 签到题,但是题面改来改去的,也是因为这题导致unrate,思路就是先把所需要的煤都转化成棍子,再看达成这么多棍子需要换多少次 代码: int main() { ll T,n,m,k; cin>>T; while(T--) { cin>>n>>m>>k; ll ans=k*m; ans+=k-1; ll qwe=ans/(n-1); if(ans%(n-1)) { qwe++;原创 2020-09-16 19:36:15 · 201 阅读 · 0 评论 -
Codeforces Round #654 (Div. 2) 补题报告
A. Magical Sticks 给你n个木棍,可以任意拼接,问你最多能有多少个相同长度的,那肯定是1和n拼n+1,2和n-1拼n+1,以此类推 int T,n; int main() { cin>>T; while(T--) { cin>>n; //a+b=c //1+n=n+1 //2+n-1=n+1 cout<<(n+1)/2<<"\n"; } return 0; } B. Magical Calendar 找不相等的排原创 2020-08-15 11:52:49 · 132 阅读 · 0 评论 -
Codeforces Round #655 (Div. 2) 补题报告
传送门 A. Omkar and Completion 大意:保证任意2个ai和不等于任意一个ai; 思路:全都是1即可 int T,n; int main() { cin>>T; while(T--) { cin>>n; rep(i,0,n) cout<<"1 "; cout<<"\n"; } return 0; } B. Omkar and Last Class of Math 大意:找到一组a,b,使a+b==n,并且使得lc原创 2020-08-13 23:53:29 · 118 阅读 · 0 评论 -
Codeforces Round #663 (Div. 2) B. Fix You
给你一个n,m的矩阵,n,m是终点,是C,其他点是D就代表往下走,R就代表往右走,需要你任意修改几个点,保证不出这个矩阵,问你最少修改次数 既然只有往下和往右走,那其实只有可能在右边界和下边界出去,所以枚举右边界的点,假如是R就改成D,枚举下边界的点,假如是D就改成R string s1[105]; int n,m,T; int main() { cin>>T; while(T--) { int ans=0; cin>>n>>m; rep(i,0,n)原创 2020-08-10 23:31:11 · 129 阅读 · 0 评论 -
Codeforces Round #663 (Div. 2) C - Cyclic Permutations
大概意思就是只要数列里,有任意一组i<j<z,满足a[i]>a[j]并且a[z]>a[j]即可,所以假如不满足的话,就是单峰数列,最大值在某个位置,左边单调递增,右边单调递减,总数量就是n!-2^(n-1),用快速幂加速一下,没了 ll mod_pow(ll x,ll n, ll mod) { ll res=1; while(n) { if(n&1) res=res*x%mod; x=x*x%mod; n>>=1; } return res;原创 2020-08-10 23:16:09 · 104 阅读 · 0 评论 -
Codeforces Round #663 (Div. 2) D-505
题目要求每一个平方子矩阵里1都为奇数 那么我们先分析,最小的子矩阵肯定是 2×22\times 22×2,然后就是 4×44\times 44×4 的矩阵了,然而假如 2×22\times 22×2 的矩阵里,1都是奇数个,那 4×44\times 44×4 矩阵里,怎么都是偶数,所以min(n,m)肯定不能大于等于4,否则直接输出-1,那么我们现在可以确定n和m至少有一个是小于等于3的了。 再继续分析,我们设n是小的,m是大的(总之这个矩阵你可以随便转90°,要是n比m大你就转一下呗),假如n是1,就一行原创 2020-08-10 20:57:31 · 365 阅读 · 0 评论 -
Codeforces Round #642 (Div. 3)补题报告
(因本人懒得翻墙,以下链接皆为cf的镜像网站链接) A E. K-periodic Garland(点击传送) dp题,字符串长度最大为1e6,从1开始,设dp[i]为在i位置时,满足要求的最小修改次数,那么dp[i]要么等于1~i-1,也就是之前所有的数字里,为1的数字总和,你把前面所有的1全变成0,不就满足条件了吗?要么等于dp[i-k]加上i-k+1 ~ i-1这个范围里所有的1的数量,dp[i-k]是i-k位置时满足的,所以把他后面到 i 位置的1全变成0,也是合理的,最后看i位置本身是不是1,假如原创 2020-08-07 07:25:47 · 202 阅读 · 0 评论 -
20200525日常摸鱼
20200525日常摸鱼 共计8题,有点少 今日训练时长:未定 洛谷P1638 逛画展 先从1开始读入数据,直到画家数量达到m的时候,便可以开始真正的处理,首先设置左端点l=1,右端点r=第一次满画家的位置,同时b数组用来存储这一段画家各出现了多少次,桶排的思想,然后判断左端点的点出现次数是否>1,假如大于1的话就可以删去,直到左端点无法再删除,这时比较下l,r和q,w,取最短的区间保存,然后每次r++,都重复进行上面的操作,判断左端点能否删,并取最短区间,这题就做完了 #include <bi原创 2020-05-26 00:22:42 · 149 阅读 · 0 评论