1.AtCoder Beginner Contest 293(C,D ,E,F)2.Educational Codeforces Round 115 (Rated for Div. 2)(D,E)3.AtCoder Beginner Contest 294(E,F,G)4.AtCoder Beginner Contest 2465.中国石油大学(北京)第三届“骏码杯”程序设计竞赛(同步赛)(D,E,F)6.Codeforces Global Round 16(D,E,F)7.AtCoder Beginner Contest 209(D,E)8.Monoxer Programming Contest 2022(AtCoder Beginner Contest 238)(E,F)9.AtCoder Beginner Contest 285(B,D,E,F)10.AtCoder Beginner Contest 242(D,E)11.AtCoder Beginner Contest 223(D,E,F)12.AtCoder Beginner Contest 207(D,E)13.AtCoder Beginner Contest 247(E,F)14.AtCoder Beginner Contest 226(E,F,G)15.AtCoder Beginner Contest 229(F,G)16.AtCoder Beginner Contest 273(E)17.AtCoder Beginner Contest 286(G)18.AtCoder Beginner Contest 287(C,D,E,F)19.AtCoder Beginner Contest 288(D,E,F)20.AtCoder Beginner Contest 289(E,F)21.AtCoder Beginner Contest 290(D,E)22.AtCoder Beginner Contest 292(E,F,G)23.AtCoder Beginner Contest 298(D,F)24.AtCoder Beginner Contest 299(E,F)25.AtCoder Beginner Contest 300(E,F)26.AtCoder Beginner Contest 302(E,F,G)27.AtCoder Beginner Contest 253(E,F)28.AtCoder Beginner Contest 245(D,E,F)29.AtCoder Beginner Contest 248(D,E,F) 30.AtCoder Beginner Contest 206(Sponsored by Panasonic)(E,F)31.Codeforces Round 875 (Div. 2)(D)32.AtCoder Beginner Contest 178(E,F)33.AtCoder Beginner Contest 307(E,F,G)34.CodeTON Round 5 (Div. 1 + Div. 2, Rated, Prizes!)C35.Educational Codeforces Round 151 (Rated for Div. 2)(C,D)
36.AtCoder Beginner Contest 212(E,F)37.牛客小白月赛5138.2022年浙大城市学院新生程序设计竞赛(同步赛)(补题)39.Codeforces Round #770 (Div. 2)B,C40.Codeforces Global Round 24(B,C)41.Codeforces Round #836 (Div. 2)C42.Codeforces Round #840 (Div. 2) C43.Good Bye 2022: 2023 is NEAR C44.Codeforces Round #765 (Div. 2)A,B,C45.Codeforces Round #766 (Div. 2)C,D46.Codeforces Round #841 (Div. 2) and Divide by Zero 202247.Codeforces Round #767 (Div. 2)C ,D 48.Codeforces Round #768 (Div. 2)C ,D49. Codeforces Round #769 (Div. 2) B,C50.Educational Codeforces Round 122 (Rated for Div. 2),C,D51.Educational Codeforces Round 119 (Rated for Div. 2)52.AtCoder Beginner Contest 25853.Codeforces Round #763 (Div. 2)C54.Codeforces Round #843 (Div. 2)(B,C,D,E)55.Educational Codeforces Round 141 (Rated for Div. 2)(B,C,D)56.AtCoder Beginner Contest 275(B,C,D,E,F)57.Codeforces Round #842 (Div. 2)(B,D,E)58.AtCoder Beginner Contest 284(D,E,F)59.The 14th Jilin Provincial Collegiate Programming Contest(补题)60.牛客小白月赛65(C,D,E,F)61.AtCoder Beginner Contest 281(D,E,F)62.Good Bye 2021: 2022 is NEAR D63.Hello 202364.The 15th Jilin Provincial Collegiate Programming Contest(补题)65.Codeforces Round #781 (Div. 2)C 66.Hello 2022(B,D)67.AtCoder Beginner Contest 272(D,E)68.Codeforces Round 751 (Div. 2)(D)69.Codeforces Round 856 (Div. 2)(C,D)70.Codeforces Round 752 (Div. 2)(C,D,E)71.Codeforces Round 855 (Div. 3)(E,F)72.AtCoder Regular Contest 131(A,B,C)73.Educational Codeforces Round 144 (Rated for Div. 2)(A,B,C,D)74.Codeforces Round 853 (Div. 2)(C,D)75.牛客练习赛109(C,D)76.AtCoder Beginner Contest 291(Sponsored by TOYOTA SYSTEMS)(D,E,F)77.Educational Codeforces Round 143 (Rated for Div. 2)(A,C,D)78.Codeforces Round #852 (Div. 2)(C,D)79.Educational Codeforces Round 118 (Rated for Div. 2)(D,E)80.AtCoder Beginner Contest 236(D,E,F)81.Codeforces Round #850 (Div. 2, based on VK Cup 2022 - Final Round)(B,D)82.Codeforces Round #848 (Div. 2)(B,C,D)83.TypeDB Forces 2023 (Div. 1 + Div. 2, Rated, Prizes!) (B,C,D) 84.Codeforces Round #846 (Div. 2)(B,E) 85.Educational Codeforces Round 142 (Rated for Div. 2)(C,D)86.2023牛客寒假算法基础集训营687.Codeforces Round #845 (Div. 2) and ByteRace 2023(A,B,C)88.2023牛客寒假算法基础集训营5 89.2023牛客寒假算法基础集训营3 90.2023牛客寒假算法基础集训营291.2023牛客寒假算法基础集训营192.Educational Codeforces Round 120 (Rated for Div. 2) C,D93.AtCoder Beginner Contest 254(C,D,E,F)
Educational Codeforces Round 151 (Rated for Div. 2)(C,D)
C(dp,子序列自动机)
C
题目大意就就是给你一个字符串,还给出两个边界字符串和,长度为,问我们是否可以构造满足一下条件的字符串
,第个字符必须在和的双闭区间里面
,这个获得的字符串不可以是的序列(里面删除任意个字符得到的字符串)
这一场我是的,结果惨不忍睹,但是,这个题我在时有思路,后面虽然时间过了,但是还是过了
既然是求不是的子序列,我当时是求出以的子序列,满足要求的数量的字符串的数量(每一个位置可以是不同的字符),我们可以求出所有的数量,然后拿我们求得这个序列得到的字符串的数量,如果数量比所有的数量少,那么一定存在满足以上条件,否则,不满足
然后我就想出来状态转移方程
代表第个字符是的数量,是的的和
但是我后面发现第个字符为可以存在的多个不同位置,但是第个字符为的贡献只有,然后我每次得到一个最新的第个字符为,我都会减去前面的值,然后再加上此时获得的值(一定大于等于前面的值),这样第个字符为的字符串数量一定是最大的数量
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include<cmath>
#include <unordered_map>
#include <array>
#include <cstring>
#include <bitset>
#include <numeric>
using namespace std;
#define int long long
#define LL long long
#define ios ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define inf 1e18
#define INF 1e18
#define eps 1e-6
#define mem(a,b) memset((a),(b),sizeof(a))
const int maxn=3e5+10;
const int mod=998244353;
int t;
int dp[maxn][10];
int sum[maxn];
int m,n;
string s,l,r;
void solve()
{
cin>>s>>m>>l>>r;
int cnt=1;
n=s.size();
s=" "+s;
l=" "+l;
r=" "+r;
for (int i=1;i<=m;i++)
{
int tot=r[i]-l[i]+1;
if(tot)
{
cnt=cnt*tot;
}
else
{
cnt=0;
break;
}
for (int j=0;j<=9;j++)
{
dp[i][j]=0;
}
sum[i]=0;
}
if(cnt==0)
{
cout<<"NO\n";
return ;
}
for (int i=1;i<=n;i++)
{
int now=s[i]-'0';
for (int j=m;j>=1;j--)
{
if(s[i]>=l[j]&&s[i]<=r[j])
{
int last=dp[j][now];
if(j==1)
{
dp[j][now]=1;
}
else
{
dp[j][now]=sum[j-1];
}
sum[j]-=last;
sum[j]+=dp[j][now];
}
}
}
if(sum[m]>=cnt)
{
cout<<"NO\n";
}
else
{
cout<<"YES\n";
}
return ;
}
signed main ()
{
cin>>t;
while (t--)
{
solve();
}
system ("pause");
return 0;
}
然后我后面看到有大佬利用子序列自动机来解决这个问题
子序列自动机
这里使用子序列自动机来查找满足条件的的字符串是否是的子序列
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include<cmath>
#include <unordered_map>
#include <array>
#include <cstring>
#include <bitset>
#include <numeric>
using namespace std;
#define int long long
#define LL long long
#define ios ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define inf 1e18
#define INF 1e18
#define eps 1e-6
#define mem(a,b) memset((a),(b),sizeof(a))
const int maxn=3e5+10;
const int mod=998244353;
int t;
string s,l,r;
int n,m;
void solve()
{
cin>>s;
n=s.size();
vector<vector<int>>nxt(n+2,vector<int>(10));
for (int i=0;i<=9;i++)
{
nxt[n+1][i]=n+10;
}
s=" "+s;
cin>>m>>l>>r;
l=" "+l;
r=" "+r;
for (int i=n;i>=1;i--)
{
int now=s[i]-'0';
nxt[i]=nxt[i+1];
nxt[i][now]=i+1;
}
int last=1;
for (int i=1;i<=m;i++)
{
int cur=0;
int ll=l[i]-'0',rr=r[i]-'0';
for (int j=ll;j<=rr;j++)
{
cur=max(cur,nxt[last][j]);
}
last=cur;
if(last>n+1)
{
cout<<"YES\n";
return ;
}
}
cout<<"NO\n";
return ;
}
signed main ()
{
cin>>t;
while (t--)
{
solve();
}
system ("pause");
return 0;
}
D(思维)
D
这个题目的题意很好懂,大意就是给你一个长度为的数组,每一个都代表着一种变化(可以小于),把变成,我们可以任意选择一个,这样后面要是遇到变化后如果小于了,但是它可以不用变得那么小,而是直接变成,我们需要知道选择为多少时,在经过次变化之后得到的数最大
我们要让这个数最大,主要是靠那些变小的,我们可以把某一个在当前可以为最大的作为,然后后面我们要让这个减小负数对的影响,那么就是和(一切正常到了这个操作后的数字),让这两个数字之间的差值越大,那么主观下来,好像,可以让这些负数的操作使变小的数值更小
以上只是个人拙见
大佬题解
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include<cmath>
#include <unordered_map>
#include <array>
#include <cstring>
#include <bitset>
#include <numeric>
using namespace std;
#define int long long
#define LL long long
#define ios ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define inf 1e18
#define INF 1e18
#define eps 1e-6
#define mem(a,b) memset((a),(b),sizeof(a))
const int maxn=3e5+10;
const int mod=998244353;
int t;
int n,a[maxn],sum[maxn];
void solve()
{
cin>>n;
int ans=0;
for (int i=1;i<=n;i++)
{
cin>>a[i];
sum[i]=sum[i-1]+a[i];
}
int premax=0;
int flag=0;
for (int i=1;i<=n;i++)
{
if(sum[i]-premax<flag)
{
flag=sum[i]-premax;
ans=premax;
}
premax=max(premax,sum[i]);
}
cout<<ans<<"\n";
return ;
}
signed main ()
{
cin>>t;
while (t--)
{
solve();
}
system ("pause");
return 0;
}
还发现了一个大佬的一个题解
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)