2024.11.14&2024.11.15模拟赛( — _ — )
14日:
四个小时的模拟赛,四道小清新计数题。前面时间状态还是不太好,一个多小时把T1搞出来了,T2T3T4都不会,暴力也没打成。
T1又顺便挂了20分,所以最后总分只有80。是得好好调整状态了。
T1【字符串】
题目大意:
给出两个字符串
设
解题思路:
所有
但!注意到前后缀非空,所以统计字符时要跳过
挂分小技巧:取模出错。
坏代码
#incIude <bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e6+5;
const int MOD=998244353;
char s1[N],s2[N];
int a1[N],a2[N];
int cnt1,cnt2;
int bx1[N],bx2[N];
int ans;
signed main()
{
scanf("%s%s",s1,s2);
for (int i=0;s1[i]!='\0';i++) a1[++cnt1]=(int)(s1[i]-'a');//闲的
for (int i=0;s2[i]!='\0';i++) a2[++cnt2]=(int)(s2[i]-'a');
ans=(cnt1*cnt2)%MOD;
for (int i=2;i<=cnt1;i++) bx1[a1[i]]++;
for (int i=1;i<cnt2;i++) bx2[a2[i]]++;
for (int i=0;i<26;i++) ans=(ans-(bx1[i]*bx2[i])%MOD+MOD)%MOD;//注!意!取!模!
printf("%lld",ans);
return 0;
}
T2【艾特扣德】
待补。
15日:
抽象的题目。不多做评价了。
打了T1的正解,T2的“暴力”,预计总分140。但T1没注意到
挂了整整60分!!再次与第二失之交臂!!!
T1【最优排序】
题目大意:
给出一个值域为
解题思路:
看到这道题又手模了一会儿,突然联想到之前模拟赛的T3,于是就开始非常激动地建图……统计……然后炸了。
我们可以将不好的
对于一个节点数量为
所以,对于该环就要操作
因为这题情况非常简单,所以根本不用跑
坏代码
#incIude <bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e6+5;
int T;
int n;
int p[N];
vector <int> e[N];
int vis[N];
int ans,tol;
void init()
{
for (int i=0;i<=n;i++) e[i].clear();
for (int i=0;i<=n;i++) vis[i]=0;
ans=tol=0;
}
int dfs(int x)
{
vis[x]=1;
int res=1;
int _size=e[x].size();
for (int i=0;i<_size;i++)
{
int v=e[x][i];
if (vis[v]) continue;
res+=dfs(v);
}
return res;
}
signed main()
{
scanf("%lld",&T);
while (T--)
{
init();
scanf("%lld",&n);
for (int i=1;i<=n;i++)
{
scanf("%lld",&p[i]);
if (p[i]==i) continue;
e[i].push_back(p[i]);
}
for (int i=1;i<=n;i++)
{
if (!vis[i]&&p[i]!=i)
{
int cnt=dfs(i);
ans+=cnt/3;
if (cnt%3==2) tol++;
}
}
printf("%lld\n",ans+(tol+1)/2);
}
return 0;
}
T2【图上移动】
题目大意:
给出一个
解题思路:
爆搜。期望得分100,特判失败,实际得分80。
容易发现,我们的路径上不能走完一个环,否则无法达到要求。所以直接枚举起点
神奇代码
#incIude <bits/stdc++.h>
#define int long long
using namespace std;
const int N=50;
int n,m;
vector <int> e[N];
int ans;
int vis[N];
void dfs(int x,int _fa,int tol)
{
vis[x]=vis[_fa]+1;
int _size=e[x].size();
for (int i=0;i<_size;i++)
{
int v=e[x][i];
if (v!=_fa&&vis[v]) return ;
}
for (int i=0;i<_size;i++)
{
int v=e[x][i];
if (v==_fa) continue;
dfs(v,x,tol+1);
vis[v]=0;
}
ans=max(ans,tol);
return;
}
signed main()
{
scanf("%lld%lld",&n,&m);
for (int i=1,u,v;i<=m;i++)
{
scanf("%lld%lld",&u,&v);
e[u].push_back(v);
e[v].push_back(u);
}
for (int i=1;i<=n;i++)
{
memset(vis,0,sizeof vis);
dfs(i,0,1);
}
printf("%lld",ans);
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】