
每日一题
每日一题
行码棋
ZZUer -> USTCer,退役ACMer。个人站点:wyqz.top
展开
-
【每日一题】【枚举】【思维】奕星的棋盘
博客主页: https://blog.youkuaiyun.com/qq_50285142欢迎点赞????收藏✨关注❤留言 ???? 如有错误,敬请指正????虽然生活很难,但我们也要一直走下去????题目链接题意:有一个2∗n2*n2∗n的棋盘,上面有黑白棋子,可以把白棋子替换为黑棋子,要求使最后的黑棋子连通,求最小替换数思路:可以发现只有两行,一列的情况是有限的,而且只有四种,非常少,所以我们可以对不同情况进行分类讨论为了方便,我们把每一列的情况做一个标号第一行:0 0 1 1第二行:原创 2021-10-15 11:13:03 · 226 阅读 · 2 评论 -
【双指针】【尺取法】牛客小bai月赛34 F dd爱框框
题目链接尺取法实际上和双指针差不多,就是一个头指针,一个尾指针。如果区间的总和不满足某个条件,那么头指针向前伸展,直到满足这个条件。满足之后,尾指针再向前伸展,如果还是满足这个条件,就一直往前伸展,在伸展的过程中一直维护答案。本题题解题意:找到最短的区间长度满足区间和大于等于给定的值思路:就是尺取法,注意条件是左指针小于等于n,先右指针伸展,再左指针伸展。r代表的是区间的右端点,l代表的是区间的左端点。#include<bits/stdc++.h>using namespac原创 2021-06-01 16:06:21 · 243 阅读 · 10 评论 -
codeforces/Atcoder思维题总结
思维题汇总原创 2021-04-28 11:17:50 · 2175 阅读 · 9 评论 -
每日一题-外卖店优先级(2019省赛初赛)
思路:用结构体存储输入,按时间从小到大的顺序排序结构体,因为要按时间来处理信息。对每个外卖店未接收到订单时优先级减一的处理:定义一个数组存储外卖店前一次出现订单的时刻,如果该次出现了订单,然后就对该外卖店的优先级进行处理(优先级的减法 当前时刻-上一次出现的时刻-1),这样优先级自减一的处理就不会超时。最后再遍历一遍所有的外卖店,对外卖店进行优先级减一的处理(因为有的外卖店可能最后在优先缓存里面,但是最后几次都没有订单就被移出了优先缓存,也可能有的外卖店都没有出现订单)对订单的处理:当该外卖店出原创 2021-04-17 16:57:44 · 203 阅读 · 0 评论 -
每日一题-圆桌问题(约瑟夫问题)(vector)
#include<bits/stdc++.h>using namespace std;typedef long long ll;vector<int> v;ll m,n;int main(){ while(~scanf("%lld%lld",&n,&m)) { v.clear(); for(int i=0;i<2*n;i++) v.push_back(i); ll pos = 0; for(int i=0;i<n;i+原创 2021-03-31 20:19:02 · 221 阅读 · 0 评论 -
每日一题-codeforces1501B
就是判断每层蛋糕是否被奶酪浸透。维护一个mn,表示最小的未被浸透的蛋糕层数,每次询问都维护一下。用一个vis数组标记是否被浸透,如果当前的下标大于mn,则被浸透。#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn = 2e5+5;const int INF = 0x3f3f3f3f; int a[maxn];int vis[maxn];void solve(){ m原创 2021-03-28 09:44:35 · 148 阅读 · 0 评论 -
每日一题-走方格(第十一届蓝桥杯A)(动态规划)
刚开始想着用数学方法求解,没想到最后还是打破了期望。没有注意到只能向右或向下走。错误成这样了,想着每行有几种选择,然后算出选择的次数,乘起来就行了,当时却没想到组合数考虑了向左走的情况,无奈之下,只能dp做了。if(n%2==0&&m%2==0) { cout<<0; return 0;}cout<<pow((m+1)/2,(n-1)/2);return 0;正确解法:dp 比较简单设置初始值dp[1][1] = 1状态表示:dp[.原创 2021-03-25 20:52:59 · 709 阅读 · 0 评论 -
每日一题-解码(第十一届蓝桥杯)(简单思维)
这是一道比较水的思维题,我竟然发在题解上了,可见我是多么的菜。我的初始思路是:从第2个字符开始遍历,每当遍历到数字时,就先停下来往后遍历字符串,计算出前面的字符出现的长度,我认为字符串出现的次数是可以超过两位数的,也就是可以出现几十次。当遍历到的字符不是数字时停下来,结束数字的遍历,可以计算出出现次数。但是下次遍历字符时,i就要改变了,变为前面访问的数字后的下下个字符判断,就要设置一个临时变量存最后j的数值,最后赋给i,下一次循环i就自加一。最后要特判最后一个字符,因为始终是对下一个字符判断是否为.原创 2021-03-25 20:08:02 · 267 阅读 · 0 评论 -
每日一题-8n皇后问题(dfs)经典题目
洛谷P1219对每行进行搜索,因为要每行只有一个皇后,对每行搜索可以减少一个标记数组。标记列用l【】数组,标记左右两条对角线用vl【】,vr【】数组,对角线标记可以根据数学知识得到此时的坐标的有关运算为常数,可以根据这来标记。因为y-x会有负数,所以加上n使结果为正(数组没有下标为负的)。#include<bits/stdc++.h>using namespace std;int l[100],vr[100],vl[100],st[100];int n,ans;void d原创 2021-03-24 11:09:09 · 393 阅读 · 0 评论 -
每日一题-全球变暖(蓝桥杯A)(bfs/dfs)
思路:对每一个满足的点(标记为#的点)进行bfs,用total来记录岛屿的总节点数,bound来记录沉没的节点数(四周只要有标记为 . 的就记录下来),如果这两个数相等,说明这个岛屿就完全沉没。因为对每个点bfs时,是只满足vis【】【】和g【】【】的,每次的bfs会更新vis【】【】,接下来的搜索就会少很多次,就是每个点只遍历一次。只有连通的节点才会从一个节点bfs搜索过来#include<bits/stdc++.h>using namespace std;const int m.原创 2021-03-22 18:03:32 · 264 阅读 · 0 评论 -
每日一题-四平方和(蓝桥杯)(暴力/哈希表)
暴力解法(会超时)#include<bits/stdc++.h>using namespace std;int n;unordered_map<int ,int>mp;void init(){ for(int i=0;i*i<=n;i++) { mp[i*i]++; }}int main(){ cin>>n; init(); int x = (int)sqrt(n); f..原创 2021-03-22 14:56:15 · 339 阅读 · 0 评论 -
【记忆化搜索】【DP】每日一题-滑雪(洛谷P1434)
记忆化搜索原创 2021-03-19 17:30:34 · 174 阅读 · 0 评论 -
每日一题-数字三角形(dp入门)
状态表示:dp[i][j]代表在第i层第j个数字所能达到的最大值。状态转移:dp[i][j] += max(dp[i-1][j-1],dp[i-1][j]);#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn = 1005;ll dp[maxn][maxn];int r;int main(){ cin>>r; for(int i=1;i<=r;i+.原创 2021-03-19 09:18:39 · 227 阅读 · 0 评论 -
每日一题-被3整除的子序列(动态规划)
子序列要求不是连续的dp[i][j]表示前i个数字模3余j的个数。转移方程dp[i-1][j]代表不选该数的方案dp[i-1][(j-m+3)%3]代表选该数代表的方案数,需要满足该数的余数加上前面的余数的和模3还为j,即j = m + pre,得 pre = j - m,转移方程极即为这样#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn = 55;const ll m.原创 2021-03-17 11:23:23 · 229 阅读 · 0 评论 -
每日一题-acwing 完全二叉树的权值
每次开头为2的n-1次方,结束为2的n次方减1,注意判断j小于等于n,否则最后一层时,段错误(数组越界)。#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn = 1e5+5;int a[maxn];int n;int main(){ cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; in..原创 2021-03-16 22:07:56 · 178 阅读 · 0 评论 -
acwing小朋友排队(树状数组)
考虑用树状数组求解,简单的暴力会超时。大概思路:每个数会和前面比它大的数交换,会和后面比它小的数交换,所以每个数交换的总次数为前面比这个数大的数的个数+后面比这个数小的个数,下面的代码用b[i]维护这个个数和。如何求呢?用树状数组保存每个数出现的次数。第一次正向遍历,每次将数据出现的次数加入到树状数组中,并更新b[i],更新的值为当前遍历的个数减去小于a[i](当前数)的个数。然后清空树状数组。第二次逆向遍历,刚好可以找后面比a[i]小的数的个数,也是每次更新b[i]。最后对整个b[i]进.原创 2021-03-16 21:22:38 · 224 阅读 · 0 评论 -
每日一题-蚂蚁感冒(蓝桥杯A组,思维题)
蚂蚁感冒思路:这是一道思维题。关键的一点是,一只感染的蚂蚁与另一只蚂蚁相遇,然后各自掉头其实可以看作两只蚂蚁没有掉头,而是相互穿过,然后同时感染,就可以理解为求能够相互穿过的蚂蚁的数量。一般的情况是:第一只蚂蚁向左走,左边向右走的蚂蚁(数量记为 r )都会感染,右边向左走的蚂蚁(数量记为 l )也都会感染,总感染数量为 l + r + 1,因为带上自己所以要加一。第一只蚂蚁向右走,同样的道理,总数量为 l + r + 1.特殊情况:就是第一只蚂蚁向左走,左边的蚂蚁都向左走,然后就没有感原创 2021-03-12 21:53:46 · 189 阅读 · 0 评论 -
每日一题-第四届蓝桥杯b组-带分数(dfs)
思路:1.暴力求出9个数的全排列,用num[i]数组存储每个数字。2.对全排列划分为三部分,依次进行判断。难点:划分为三个数,因为a,b,c三个数必须存在c最小可能为1,b也可能是个位数,那么a最多就是7位数。第一层循环是a的位数的截取,第二层是b的位数的截取,b要紧接着a,所以j = i + 1开始,b至少给c留一位,故终点为8.所以对a从1到7循环截取,b必须大于c,b从a的后面一位截取,i+1到j。c从j + 1到终点9.#include<bits/stdc++.h>us..原创 2021-03-11 19:37:09 · 180 阅读 · 0 评论 -
每日一题-蓝桥杯A组 剪格子(dfs搜索+剪枝)
题目描述:蓝桥杯上只考虑连通的情况。如果要不连通,可以上acwing 1206.剪格子查看相关题解暴力搜索+相关剪枝:1.当总和为奇数时,显然不能分成加和两块相等的区域,因为每个方格都是整数。2.当前加和等于总和的一半时记录最小值,并返回。3.对每个点都进行搜索,涵盖了所有的路径。题后总结:1.当要记录的数值很多时,比如本题,已走格子数,当前加和,直接在dfs上增加参数数量,不再另外申请变量空间。有利于减少代码量。2.检查时,直接用continue,不要总写check函数,同时也减原创 2021-03-11 14:49:58 · 277 阅读 · 2 评论 -
每日一题-蓝桥杯A组 买不到的数目(数学)
题目描述直接无脑搜索会超时。TLE代码:#include<bits/stdc++.h>using namespace std;int n,m;bool dfs(int x){ if(x==0) return true; if(x>=m && dfs(x-m)) return true; if(x>=n && dfs(x-n)) return true; return false;}int main(原创 2021-03-11 13:18:18 · 190 阅读 · 0 评论 -
每日一题-跳跃题解(蓝桥杯)(动态规划)
分析:这是一道标准的动态规划题。首先需要弄清两个方面:1.状态表示:g[i][j] 表示到达此点的最大权值。2.状态转移方程:ans = max(ans,g[i+X[k]][j+Y[k]])表示求能够到达此点的所有点的权值最大值。g[i][j] += ans;最后更新该点的权值注意:因为点是从前往后更新的,所以每步都在获取局部最优解,当上一个点到达该点时,上一个点一定是最优的,故只需要进行一次的点的权值更新。#include <iostream>#include<b...原创 2021-03-10 15:27:43 · 3932 阅读 · 19 评论 -
每日一题-Subsequence(前缀和+尺取法)(复习)
大意是:给一个整数数列,找这个数列的子序列的和大于给定数值s的最短序列长度。思路:尺取法应用:1.把子序列看成一个蚯蚓,当子序列和小于s时,头向前伸,直到子序列和大于等于s时就停止前伸,并记录长度。2.尾部前伸,直到序列和小于数值s停止前伸,并记录长度。然后再伸头,一直循环下去。3.每次记录长度时更新结果,取最小值。#include<iostream>using namespace std;typedef long long LL;int num[100005];voi.原创 2021-03-09 22:21:40 · 214 阅读 · 0 评论 -
每日一题-树状数组模板题
题源请点击此处#include<iostream> #include<cstring>using namespace std;typedef long long ll;const int maxn = 5e4+5;ll a[maxn],c[maxn];ll t,n;int lowbit(int x){ return x&(-x);}//更新值void update(int i,int k){ while(i<=n) { c[i] +原创 2021-03-08 17:48:07 · 239 阅读 · 0 评论 -
每日一题-试除法+质因子分解
试除法+质因子分解试除法偶数一定不是素数,排除特例,判断每个奇数是否是素数。int isprime(int x){ if(x==2) return 1; if(x%2==0) return 0; for(int i=3;i*i<=x;i+=2) { if(x%i==0) return 0; } return 1;}质因子分解#include<bits/stdc++.h>using namespace std;原创 2021-03-07 16:22:20 · 274 阅读 · 0 评论 -
每日一题-二维hash(待修改)
不会,待修改。#include<bits/stdc++.h>using namespace std;typedef long long ll;typedef unsigned long long ull;const int maxn = 1e3+5;ull has[maxn][maxn];ull pow1[maxn],pow2[maxn];ll a,b;int ma[maxn][maxn];int m,n,base1=131,base2=133;unordered_set.原创 2021-03-07 12:55:28 · 182 阅读 · 0 评论 -
每日一题-一维字符串hash
白兔的字符串链接:https://ac.nowcoder.com/acm/problem/15253来源:牛客网题目描述白兔有一个字符串T。白云有若干个字符串S1,S2…Sn。白兔想知道,对于白云的每一个字符串,它有多少个子串是和T循环同构的。提示:对于一个字符串a,每次把a的第一个字符移动到最后一个,如果操作若干次后能够得到字符串b,则a和b循环同构。所有字符都是小写英文字母输入描述:第一行一个字符串T(|T|<=10^6)第二行一个正整数n (n<=1000)接下来n行原创 2021-03-06 22:51:15 · 245 阅读 · 0 评论 -
每日一题-bfs最短路径变式
after与迷宫链接:https://ac.nowcoder.com/acm/problem/14608来源:牛客网after的算法书的遗落在一个叫做AIJ的迷宫中了,这个迷宫有N*M个房间,迷宫的入口为(1,1),算法书遗落在(r,c)。迷宫中的房间有四种状态:空房间、无法进入的房间、有墨菲斯托存在的房间和有莉莉丝存在的房间。墨菲斯托会否定一切,而莉莉丝会诱惑人做一种叫做YK的活动。after是一个意志薄弱的人,他遇到了墨菲斯托和莉莉丝之后,便会变成眼神空洞的超级YK机器人。after每步可以从他当原创 2021-03-05 17:49:46 · 345 阅读 · 0 评论 -
每日一题-dfs,bfs判断能否到达终点
走出迷宫链接:https://ac.nowcoder.com/acm/problem/14572来源:牛客网题目描述小明现在在玩一个游戏,游戏来到了教学关卡,迷宫是一个N*M的矩阵。小明的起点在地图中用“S”来表示,终点用“E”来表示,障碍物用“#”来表示,空地用“.”来表示。障碍物不能通过。小明如果现在在点(x,y)处,那么下一步只能走到相邻的四个格子中的某一个:(x+1,y),(x-1,y),(x,y+1),(x,y-1);小明想要知道,现在他能否从起点走到终点。输入描述:本题包含多组原创 2021-03-04 22:42:35 · 1053 阅读 · 2 评论 -
每日一题-dfs遍历
选择困难症链接:https://ac.nowcoder.com/acm/problem/13594来源:牛客网题目描述小L有严重的选择困难症。早上起床后,需要花很长时间决定今天穿什么出门。假设一共有k类物品需要搭配选择,每类物品的个数为Ai,每个物品有一个喜欢值Vj,代表小L对这件物品的喜欢程度。小L想知道,有多少种方案,使得选出来的总喜欢值>M需要注意,每类物品,至多选择1件,可以不选。输入描述:多组输入每组数据第一行输入k M(k<=6,1<=M<=1e8)原创 2021-03-04 20:42:36 · 300 阅读 · 2 评论