首页 > 相遇
头像 keduoli
发表于 2024-05-31 21:55:13
前言 题解 参加了内测,内测的结果和比赛的结果差别很大。 个人觉得蛮难的, 但是也学到了。 E. 相依 思路: DP 看着像划分形DP,但中间需要绕一下 从刷表法的思路推,会发现很难,如果从填表法,就能找到优化的点 dp[u] = min(dp[v] + 1), 满足 str[v + 1] 展开全文
头像 SDUwh
发表于 2024-05-31 21:18:46
手速场,做完签到就不会了,我好菜啊 A. 签到 #include <bits/stdc++.h> using namespace std; #define ll long long int main(){ int a,b; cin>>a>>b; 展开全文
头像 蒟蒻果冻z
发表于 2024-05-31 23:20:39
E-相依 定义dp[i]为第一个数到第i个数所需要合并的最少次数,可以得到动态转移方程: dp[i] = min{dp[j - 1] + 1} (1 <= j < i且 val[i] = val [j]且 dp[j - 1]存在) 但是这样做要枚举前i - 1个数,时间复杂度原地爆炸。观 展开全文
头像 Haborym
发表于 2024-06-01 00:20:06
出题人在此谢罪,题目难度整体偏高,并且G题没有卡掉某些暴力,现在数据已经加强。 题解 A 按照题面模拟 B 当2*A > B时,走到外面再转一圈是更好的,否则就不走外面 C 思维 简单手推一下发现答案只有 -1, 1, 2。 注意 需特判,因为一个数删不了,所以是 。 如果 ,答案为 1。 展开全文
头像 爱吃鸡腿的变色龙拒绝无效加班
发表于 2024-05-31 22:12:52
原文链接 已发至CSDN
头像 CarbonLee
发表于 2024-05-31 21:29:28
#include<bits/stdc++.h> using namespace std; int main(){ int a; int b; cin>>a>>b; if(a == b) cout<<'p'; el 展开全文
头像 lzlwdz
发表于 2024-06-01 11:20:24
首先n==1和a[0]==a[n-1]特判一下 然后我们随便看个例子,10101111010,我们以这样的思路去删除,枚举所有a[0]==a[i] and a[i+1]==a[n-1]的位置, 如果存在直接输出2. 我们来尝试证明一下, 所以我们只需要找到这样的位置即可,否则就输出0 #includ 展开全文
头像 CarbonLee
发表于 2024-05-31 21:30:35
#include<bits/stdc++.h> using namespace std; int main(){ int len; int n; char c[200005]; cin>>len>>n; for(int i 展开全文
头像 CarbonLee
发表于 2024-05-31 21:31:20
#include<bits/stdc++.h> using namespace std; int main(){ int a; int b; cin>>a>>b; if(a * 2 < b){ cout< 展开全文
头像 CarbonLee
发表于 2024-05-31 21:32:39
#include<bits/stdc++.h> using namespace std; int main(){ int n; cin>>n; if(n == 1){ cout<<-1; return 0; 展开全文

等你来战

查看全部