2018CCPC女生专场 VP记录
时间:2026/10/2
人员:我和littlesue
过题顺序:F->K->H->B
位置:银末
F 赛题分析
签到
#include<iostream>
#include<algorithm>
using namespace std;
int t,n,m;
int a[100010],b[100010];
int main()
{
cin>>t;
int tmp=1;
while(t--)
{
cin>>n>>m;
int maxa=0x3f3f3f3f,maxb=0x3f3f3f3f;
int s;
for(int i=1;i<=n;i++)
{
cin>>s;
maxa=min(maxa,s);
}
for(int i=1;i<=m;i++)
{
cin>>s;
maxb=min(maxb,s);
}
printf("Problem %d:\n",tmp+1000);
if(maxa!=0x3f3f3f3f) printf("Shortest judge solution: %d bytes.\n",maxa);
else printf("Shortest judge solution: N/A bytes.\n");
if(maxb!=0x3f3f3f3f) printf("Shortest team solution: %d bytes.\n",maxb);
else printf("Shortest team solution: N/A bytes.\n");
tmp++;
}
return 0;
}
K CCPC直播
签到
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
int t;
string r,na,st;
int nu,time;
int main()
{
cin>>t;
while(t--)
{
cin>>r>>na>>nu>>st;
if(st=="Running")
{
cin>>time;
int rsz=r.size();
for(int i=1;i<=3-rsz;i++) cout<<" ";
cout<<r<<"|";
int nasz=na.size();
cout<<na;
for(int i=1;i<=16-nasz;i++) cout<<" ";
cout<<'|'<<nu;
cout<<"|[";
for(int i=1;i<=time;i++) cout<<'X';
for(int i=0;i<10-time;i++) cout<<" ";
cout<<']'<<endl;
}else{
int rsz=r.size();
for(int i=1;i<=3-rsz;i++) cout<<" ";
cout<<r<<"|";
int nasz=na.size();
cout<<na;
for(int i=1;i<=16-nasz;i++) cout<<" ";
cout<<'|'<<nu;
//cout<<"|["
if(st=="WA"){
cout<<"|[ WA ]"<<endl;
}else if(st=="TLE"){
cout<<"|[ TLE ]"<<endl;
}else if(st=="AC"){
cout<<"|[ AC ]"<<endl;
}else if(st=="FB"){
cout<<"|[ AC* ]"<<endl;
}else if(st=="MLE"){
cout<<"|[ MLE ]"<<endl;
}else if(st=="RTE"){
cout<<"|[ RTE ]"<<endl;
}else if(st=="CE"){
cout<<"|[ CE ]"<<endl;
}else if(st=="OLE"){
cout<<"|[ OLE ]"<<endl;
}else if(st=="PE"){
cout<<"|[ PE ]"<<endl;
}
}
}
return 0;
}
H SA-IS后缀数组
刚开始看感觉特别难,实际上只需要观察 \(a_i\) 和 \(a_{i+1}\) 的大小关系即可。若有相等的情况则往后取最近的不相等的符号作为该位置的答案。
#include<iostream>
#include<string>
using namespace std;
#define ll long long
ll c[1000010];
int main()
{
ll t;
cin>>t;
while(t--)
{
ll n;
cin>>n;
string s;
cin>>s;
for(int i=0;i<n-1;i++)
{
if(s[i]>s[i+1]) c[i]=1;
else if(s[i]==s[i+1]) c[i]=0;
else c[i]=-1;
}
for(int i=n-3;i>=0;i--)
{
if(c[i]==0) c[i]=c[i+1];
}
for(int i=0;i<n-1;i++)
{
if(c[i]==1)
{
cout<<">";
}else if(c[i]==-1)
{
cout<<"<";
}else{
cout<<">";
}
}
cout<<endl;
}
return 0;
}
B 缺失的数据范围
本质上是一个很简单的二分,但是由于数据范围太大所以有很多地方容易爆ull,需要在快速幂的位置进行是否越界判断。
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
#define ll unsigned long long
ll t;
ll a,b,k;
ll f(ll x)
{
if (x == 1) return 0; // ceil(log2(1)) = 0,且 b >= 1
ll lg = 0, y = x - 1;
while (y) { // 整数方式求 ceil(log2(x))
++lg;
y >>= 1;
}
ll ans = 1;
for (ll i = 0; i < a; ++i) {
if (ans > k / x) return k + 1;
ans *= x;
}
for (ll i = 0; i < b; ++i) {
if (ans > k / lg) return k + 1;
ans *= lg;
}
return ans;
}
const ll maxn=1e18;
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin>>t;
while(t--)
{
cin>>a>>b>>k;
ll l=1,r=1e18;
ll mid;
while(1)
{
mid=(l+r)/2;
if(f(mid)<=k&&f(mid+1)>k)
{
cout<<mid<<endl;
break;
}
if(f(mid+1)<=k)
{
l=mid+1;
}else{
r=mid;
}
}
}
return 0;
}

浙公网安备 33010602011771号