2024年,第一次参加CCPC,队长和另一个队友都是大二的学长,还是很有压力的。
本次比赛共13道题,我们赛前商量了一下,开始先分别找题,过了几分钟,看了一下榜单有人把f题过了,于是我们去看f题。
F题确实是签到题,看了题目要求,又出了几个样例,就交了,过了。
写完后看了榜单,又开了B题
这题我与齐学长本来认为是dp,但是齐说初状态并不好表示,另一个队友说贪心解法可以,最后通过贪心,按照顺序每次找所需最小的扫雷币进行购买。
#include<bits/stdc++.h>
using namespace std;
#define int long long
typedef pair<int,int> pii;
void solve()
{
int n;cin>>n;
vector<int>c(n);
for(int i=0;i<n;i++)cin>>c[i];
for(int i=n-2;i>=0;i--)
{
c[i]=min(c[i],c[i+1]);
}
int cnt=0;
int ans=0;
for(int i=0;i<n;i++)
{
cnt++;
if(cnt>=c[i])
{
cnt-=c[i];
ans++;
}
}
cout<<ans;
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr),cout.tie(nullptr);
int t=1;
while(t--)solve();
return 0;
}
下一个是J题
这个题刚开始想着暴力跑一下,但是后来发现了这个数字是五位数,且只要存在0,2,4,6,8,5这六个数字其中之一,重新排列后必定会有合数,把出现的数字由原来最后出现的数字调换一下,而剩下的1,3,7,9只有四位数字,不够组成五位数,所以一定有0,2,4,6,8,5这六个数其中之一,因此这道题不存在-1这种情况,注意题目的要求,需要处理一下前导零。
#include<bits/stdc++.h>
using namespace std;
#define int long long
typedef pair<int,int> pii;
void solve()
{
string s;cin>>s;
int pos=0;
string ans="";
for(int i=0;i<s.size();i++)
{
if(s[i]=='0'||s[i]=='2'||s[i]=='4'||s[i]=='6'||s[i]=='8'||s[i]=='5')
{
pos=i;
break;
}
}
for(int i=0;i<s.size();i++)
{
if(i!=pos)ans+=s[i];
}
ans+=s[pos];
if(ans[0]=='0')swap(ans[0],ans[1]);
cout<<ans<<"\n";
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr),cout.tie(nullptr);
int t=1;
cin>>t;
while(t--)solve();
return 0;
}
这三道题用时不到两个小时,但比赛就AC了这三道题。
接下来我们开了M题,刚开始都没有思路,只能试着猜一下做法,结果猜测推翻了一个又一个,时间也过得很快,大约还有一个多小时,去看了其他题,留了一个队员继续做。
接下来看了榜单,我们又开了L和H题,相比于L题,L题更有思路,但是开始写是时间已经不太够了,L题刚开始写的有点错误,调试了一些时间,很慌,还有半个小时时提交错误,很慌很慌,一点一点的试样例找错误,还有10分钟时,又提交了最后一次,特别紧张,结果WA了,很遗憾。
赛后,也找到了错误,本来是可以做对的,时间不够了,没有冷静下来找错误。
这次线下赛收获颇多,总的来说,还需更加努力。