CF1506
感觉今天脑子特别不清醒AWA
A.Strange Table
题目大意:
给出两种矩阵的排列方式:
- 竖排
- 横排
每次给出
解题思路:
直接做做完了。通过一些加减乘除求出数字
可恶啊,刚开始取模的时候没特判0
小代码
#incIude <bits/stdc++.h>
#define int long long
using namespace std;
int T;
int n,m,x;
signed main()
{
scanf("%lld",&T);
while (T--)
{
scanf("%lld%lld%lld",&n,&m,&x);
int r=x%n,c=(x+n-1)/n;
if (r==0) r=n;
printf("%lld\n",(r-1)*m+c);
}
return 0;
}
B.Partial Replacement
题目大意:
给出一个由' . '和' * '组成的字符串
特别地,要求第一个与最后一个' * '必须变为' x '。
求使字符串满足条件时,最少的操作次数。保证给出数据有合法解。
解题思路:
直接模拟做做完了。用
小代码
#incIude <bits/stdc++.h>
#define int long long
using namespace std;
int T;
int n,k;
string str;
int cnt,tol;
signed main()
{
cin>>T;
while (T--)
{
cin>>n>>k>>str;
cnt=tol=0;
int _size=str.size();
int pre=-1,lst=0;
for (int i=0;i<_size;i++)
{
if (str[i]!='*') continue;
if (pre==-1) lst=i;
if (i-pre>k||pre==-1) cnt++,pre=lst;
lst=i,tol++;
}
if (tol>1) cnt++;
printf("%lld\n",cnt);
}
return 0;
}
C.Double-ended Strings
题目大意:
给出两个字符串
解题思路:
逆转题意,我们可以将题意转化为:求
小代码
#incIude <bits/stdc++.h>
#define int long long
using namespace std;
const int N=25;
int T;
string a,b;
int f[N][N];
int ans;
signed main()
{
cin>>T;
while (T--)
{
cin>>a>>b;
int size1=a.size(),size2=b.size();
a=" "+a,b=" "+b;
ans=0;
for (int i=1;i<=size1;i++)
{
for (int j=1;j<=size2;j++)
{
if (a[i]==b[j]) f[i][j]=f[i-1][j-1]+1;
else f[i][j]=0;
ans=max(ans,f[i][j]);
}
}
cout<<size1+size2-ans*2<<'\n';
}
return 0;
}
D.Epic Transformation
题目大意:
给出一个长度为
解题思路:
注意到什么情况下会剩下数。设
注意到两两匹配,那么还需要判断一下
小代码
#incIude <bits/stdc++.h>
#define int long long
using namespace std;
const int N=2e5+5;
int T;
int n,a[N];
map <int,int> bx;
int k;
signed main()
{
scanf("%lld",&T);
while (T--)
{
k=0;
bx.clear();
scanf("%lld",&n);
for (int i=1;i<=n;i++)
{
scanf("%lld",&a[i]);
bx[a[i]]++;
k=max(k,bx[a[i]]);
}
if (k<=n/2) printf("%lld\n",n%2);
else printf("%lld\n",k*2-n);
}
return 0;
}
E.Restoring the Permutation
题目大意:
给出一个长度为
是长度为 的排列- 对于
,有
解题思路:
翻译题意后,原题相当于:给出一个排列的前缀最大值数组
直接模拟做完了。用
小代码
#incIude <bits/stdc++.h>
#define int long long
using namespace std;
const int N=2e5+5;
int T;
int n,q[N];
int ans1[N],ans2[N];
set <int> st1,st2;
signed main()
{
scanf("%lld",&T);
while (T--)
{
scanf("%lld",&n);
for (int i=1;i<=n;i++) scanf("%lld",&q[i]);
for (int i=1;i<=n;i++) st1.insert(i),st2.insert(i);
for (int i=1;i<=n;i++)
{
if (q[i]!=q[i-1])
{
ans1[i]=ans2[i]=q[i];
st1.erase(q[i]),st2.erase(q[i]);
continue;
}
set <int> ::iterator it=st2.lower_bound(q[i]);
it--;
ans2[i]=*it;
st2.erase(*it);
set <int> ::iterator it2=st1.begin();
ans1[i]=*it2;
st1.erase(*it2);
}
for (int i=1;i<=n;i++) printf("%lld ",ans1[i]);
printf("\n");
for (int i=1;i<=n;i++) printf("%lld ",ans2[i]);
printf("\n");
}
return 0;
}
F.Triangular Paths
题目大意:
考虑一个多层三角形,第
一开始在位置
现在给出
解题思路(口胡):
原题的图不助于理解题意,于是有了下图。
容易发现,原本的图形成了若干个不相交的子图,而同一个子图中
若点
若点
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】