Loading

Loading

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;
}
posted @ 2026-10-03 22:34  Miya555  阅读(10)  评论(0)    收藏  举报