2025CSP-J游记

今年是最后一次打J组了,考的还可以。

上考场了,心想必将 J组 \(AK\),我带着信心又有点慌进考场了。

先看 \(T_1\)

\(T_1\)

我感觉隔壁同学(好像是华辰的)语文挺好,看题好快,迅速开打。

\(应该是“最难的题”了吧!\)

一眼题。

直接吹泡泡文件上

#include <bits/stdc++.h>
#define int long long
using namespace std;
string s;
int a[1000005],n;
signed main()
{
	cin>>s;
	int l=s.size();
	for(int i=0;i<l;i++)
		if(isdigit(s[i]))a[++n]=s[i]-'0';
	sort(a+1,a+1+n);
	for(int i=n;i;i--)cout<<a[i];
	return 0;
} 

\(T_2\)

\(也是一眼题。这不暴力吗?\)

\(直接吹泡泡文件上\)

#include <bits/stdc++.h>
#define int long long
#define mod 998244353
using namespace std;
int n,m,a[1005];
bool cmp(int a,int b)
{
	return a>b;
}
signed main()
{
	scanf("%lld%lld",&n,&m);
	for(int i=1;i<=n*m;i++)
	{
		scanf("%lld",&a[i]);
	}
	int x=a[1],y=0;
	sort(a+1,a+1+n*m,cmp);
	for(int i=1;i<=n*m;i++)
	{
		if(a[i]==x)y=i;
	}
	int se=0,A=0,B=0;
	for(int i=1;i<=m;i++)
	{
		se+=n;
		if(y>se)continue;
		se-=n;
		y-=se;
		if(i&1)A=i,B=y;
		else A=i,B=n-y+1;
		break;
	}
	cout<<A<<" "<<B;
	return 0;
} 

\(T_3\)

\(注意隔壁已经停止写题了,好像是在T_3停止了·······\)

\(先想了一下,一眼dp\)

\(常规设状态,设dp_i表示以i为结尾的最大答案。\)

\(Sum_i表示 [1,i] 的异或和。题目要求(i,j)满足[i,j]的异或和等于K,那不就是Sum_j \oplus Sum_{i-1}=K的最大个数吗?\)

#include <bits/stdc++.h>
#define int long long
#define mod 998244353
using namespace std;
int n,a[500005],f[500005],sum[500005],k;
map<int,int>mp;
signed main()
{
//	freopen("1.in","r",stdin);
	scanf("%lld%lld",&n,&k);
	for(int i=1;i<=n;i++)
	{
		scanf("%lld",&a[i]);
		sum[i]=sum[i-1];
		sum[i]^=a[i];
	}
	mp[k]=0;
	for(int i=1;i<=n;i++)
	{
		f[i]=f[i-1];
		if(mp[sum[i]]||sum[i]==k)
			f[i]=max(f[i],f[mp[sum[i]]]+1ll);
		mp[sum[i]^k]=i;
	}
	printf("%lld\n",f[n]);
	return 0;
} 

\(T_4\)

感觉隔壁没动静了,咦\(?\),有那么难吗\(?\)

开始看题。

诶,我有一计,这不类似于背包的 \(dp\) 么。

键盘敲起。

#include <bits/stdc++.h>
#define int long long
#define mod 998244353
using namespace std;
int n,a[5005],f[5005];
signed main()
{
	scanf("%lld",&n);
	for(int i=1;i<=n;i++)
	{
		scanf("%lld",&a[i]);
	}
	sort(a+1,a+1+n);
	f[0]=1;
	int ans=0;
	for(int i=1;i<=n;i++)
	{
		for(int j=a[i]+1;j<=5001ll;j++)ans+=f[j],ans%=mod;
		for(int j=5001ll;j>=0;j--)
            f[min(5001ll,a[i]+j)]+=f[j],f[min(5001ll,a[i]+j)]%=mod;
	}
	printf("%lld",ans);
	return 0;
} 

大样例直接过。

一个半小时全部cao过,哎,今年真不难。

\(后面玩了小恐龙,surf的离线小游戏,还不错。\)

但第\(S\)组可不太简单。

总结

今年可能圆了我的 \(AK\) 梦,虽然真实成绩没出,但估分 \(400\)

posted @ 2025-11-02 20:20  xthought  阅读(7)  评论(0)    收藏  举报