CSP-J 2023 题解

T1

这么水?!

赛时AC。

思路:小学数学题,我孙子都会做

认真点。

就是余数和商,小学二年级的知识(毕导:亻尔女子)

代码:

#include<bits/stdc++.h>
#define LL long long
using namespace std;
LL n,sum;
LL t(LL a)
{
	if(a!=1)return 1+t(a-((a-1)/3+1));
	else return 1;
}
int main()
{
   scanf("%lld",&n);
	printf("%lld ",t(n));
	while((n-1)%3!=0)
	{
		sum++;
		n-=(n-1)/3+1;
	}
	printf("%lld",sum+1);
	return 0;
}

T2

贪心。

赛时打挂了,15分。

正解:每次当跑不到下一个站点的时候就“跑回”目前遇到的最便宜的站点加油。

错因:看代码:

#include<stdio.h>
#include<bits/stdc++.h>
#define N 100010
#define MOD 998244353
#define esp 1e-8
#define INF 999999999999999999
#define LL long long
#define rep(i,a,b,g) for(LL i=a;i<=b;i+=g)
#define rem(i,a,b,g) for(LL i=a;i>=b;i-=g)
#define repn(i,a,b,g) for(LL i=a;i<b;i+=g)
#define remn(i,a,b,g) for(LL i=a;i>b;i-=g)
#define pll pair<LL,LL>
#define mkp(x,y) make_pair(x,y)
#define i128 __int128
#define lowbit(x) ((x)&(-(x)))
#define lc (u<<1)
#define rc (u<<1|1)
using namespace std;
void read(i128 &x)
{
	i128 f=1;
	x=0;
	char ch=getchar();
	while(ch<'0'||ch>'9')
	{
		if(ch=='-')f=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9')
	{
		x=x*10+ch-'0';
		ch=getchar();
	}
	x*=f;
}
void write(i128 x)
{
	if(x>=10)write(x/10);
	putchar(x%10+'0');
}
LL n,d,v[N],a[N],lama=INF,dis,sum;
int main()
{
	cin>>n>>d;
	rep(i,1,n-1,1)cin>>v[i];
	rep(i,1,n,1)cin>>a[i];
	rep(i,1,n-1,1)
	{
		if(lama>a[i])
		{
			lama=a[i];
		}
		if(dis<v[i])
		{
			LL t=v[i]-dis;
			t=(t/d)+((t%d)>0);
			sum+=t*lama;
			dis+=t*d;
		}
		dis-=v[i];//这里,我赛时放在if里面了...
	}
	cout<<sum<<endl;
	return 0;
}

T3

还真是大模拟?!小周老师是不是偷题了?!

就按照题目说的做啊。

没有任何思维难度。

哦有个坑就是正负号的问题。

赛时60分。

错因:见代码:

#include<bits/stdc++.h>
#define LL long long
using namespace std;
LL t,m,a,b,c,CGfz,CGfm,f;
LL CGfz1,CGfz2,CGfm1,CGfm2;
double CG1,CG2;
int pf[10004200];
void init()
{
	for(int i=0;i<=3030;i++)pf[i*i]=i;//这里,2000不够啊
}
LL CGd(LL a,LL b)
{
	if(b==0)return a;
	return CGd(b,a%b);
}
int main()
{
    init();
    scanf("%lld%lld",&t,&m);
    while(t--)
    {
    	scanf("%lld%lld%lld",&a,&b,&c);
    	LL s=b*b-4*a*c;
    	if(s<0)
    	{
    		printf("NO\n");
    		continue;
		}
		if(s==0)
		{
			CGfz=-b;
			CGfm=2*a;
			f=CGd(CGfz,CGfm);
			CGfz/=f;
			CGfm/=f;
			if(CGfm<0&&CGfz>0)
			{
				CGfm=-CGfm;
				CGfz=-CGfz;
			}
			if(CGfm==1)
			{
				printf("%lld\n",CGfz);
			}
			else
			{
				printf("%lld/%lld\n",CGfz,CGfm);
			}
			continue;
		}
		if(pf[s])
		{
			CGfz1=-b-pf[s];
			CGfz2=-b+pf[s];
			CGfm1=2*a;
			CGfm2=2*a;
			f=CGd(CGfz1,CGfm1);
			CGfz1/=f;
			CGfm1/=f;
			if(CGfm1<0&&CGfz1>0)
			{
				CGfm1=-CGfm1;
				CGfz1=-CGfz1;
			}
			f=CGd(CGfz2,CGfm2);
			CGfz2/=f;
			CGfm2/=f;
			if(CGfm2<0&&CGfz2>0)
			{
				CGfm2=-CGfm2;
				CGfz2=-CGfz2;
			}
			CG1=CGfz1*1.0/CGfm1;
			CG2=CGfz2*1.0/CGfm2;
			if(CG1>CG2)CGfm=CGfm1,CGfz=CGfz1;
			else CGfm=CGfm2,CGfz=CGfz2;
			if(CGfm==1)
			{
				printf("%lld\n",CGfz);
			}
			else
			{
				printf("%lld/%lld\n",CGfz,CGfm);
			}
			continue;
		}
		if(b!=0)
		{
			CGfz=-b;
			CGfm=2*a;
			f=CGd(CGfz,CGfm);
			CGfz/=f;
			CGfm/=f;
			if(CGfm<0&&CGfz>0)
			{
				CGfm=-CGfm;
				CGfz=-CGfz;
			}
			if(CGfm==1)
			{
				printf("%lld+",CGfz);
			}
			else
			{
				printf("%lld/%lld+",CGfz,CGfm);
			}
		}
		CGfz=1;
		CGfm=2*a;
		for(int i=2;i<=3030;i++)
		{
			while(s%(i*i)==0)
			{
				s/=(i*i);
				CGfz*=i;
			}
		}
		f=CGd(CGfz,CGfm);
		CGfz/=f;
		CGfm/=f;
		if(CGfz==CGfm)
		{
			printf("sqrt(%lld)\n",s);
			continue;
		}
		if(CGfz%CGfm==0)
		{
			CGfz=labs(CGfz/CGfm);
			if(CGfz==1)printf("sqrt(%lld)\n",s);
			else printf("%lld*sqrt(%lld)\n",CGfz,s);
			continue;
		}
		if(CGfz==1)
		{
			CGfm=labs(CGfm);
			printf("sqrt(%lld)/%lld\n",s,CGfm);
			continue;
		}
		printf("%lld*sqrt(%lld)/%lld\n",labs(CGfz),s,labs(CGfm));
	}
	return 0;
}

T4

赛时没正解,骗了10分。

由于作者懒放个同学写的题解链接

代码:

#include<stdio.h>
#include<bits/stdc++.h>
#define N 1000010
#define MOD 998244353
#define esp 1e-8
#define INF 999999999999999999
#define LL long long
#define rep(i,a,b,g) for(LL i=a;i<=b;i+=g)
#define rem(i,a,b,g) for(LL i=a;i>=b;i-=g)
#define repn(i,a,b,g) for(LL i=a;i<b;i+=g)
#define remn(i,a,b,g) for(LL i=a;i>b;i-=g)
#define pll pair<LL,LL>
#define mkp(x,y) make_pair(x,y)
#define i128 __int128
#define lowbit(x) ((x)&(-(x)))
#define lc (u<<1)
#define rc (u<<1|1)
using namespace std;
void read(i128 &x)
{
	i128 f=1;
	x=0;
	char ch=getchar();
	while(ch<'0'||ch>'9')
	{
		if(ch=='-')f=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9')
	{
		x=x*10+ch-'0';
		ch=getchar();
	}
	x*=f;
}
void write(i128 x)
{
	if(x>=10)write(x/10);
	putchar(x%10+'0');
}
LL n,m,k,dis[10010][110];
bool f[10010][110];
vector<pll >e[10010];
priority_queue<pll,vector<pll >,greater<pll > >q;//赛时这里是普通queue,然后TLE力
void add(LL u,LL v,LL w)
{
	e[u].push_back({v,w});
}
void dij(LL s)
{
	dis[s][0]=0;
	q.push({0,s});
	while(!q.empty())
	{
		LL u=q.top().second,p=q.top().first;
		q.pop();
		if(f[u][p%k])continue;
		f[u][p%k]=1;
		for(auto d:e[u])
		{
			LL v=d.first,w=d.second,t=(p+1)%k;
			if(p>=w)t=p;
			else
			{
				t=((w-p+k-1)/k)*k+p;
			}
			if(dis[v][(t+1)%k]>t+1)
			{
				dis[v][(t+1)%k]=t+1;
				q.push({t+1,v});
			}
		}
	}
}
int main()
{
	memset(dis,0x3f,sizeof(dis));
	cin>>n>>m>>k;
	rep(i,1,m,1)
	{
		LL u,v,w;
		cin>>u>>v>>w;
		add(u,v,w);
	}
	dij(1);
	if(!f[n][0])cout<<-1<<endl;
	else cout<<dis[n][0]<<endl;
	return 0;
}

闲话:TB认为用queue能AC但我TLE10分了,傻逼TB。

posted @   cppom  阅读(28)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
  1. 1 世末歌者 乐正绫
世末歌者 - 乐正绫
00:00 / 00:00
An audio error has occurred.

蝉时雨 化成淡墨渲染暮色

渗透着 勾勒出足迹与车辙

欢笑声 与漂浮的水汽饱和

隔着窗 同城市一并模糊了

拨弄着 旧吉他 哼着四拍子的歌

拨弄着 旧吉他 哼着四拍子的歌

回音中 一个人 仿佛颇悠然自得

等凉雨 的温度 将不安燥热中和

寻觅着 风的波折

我仍然在无人问津的阴雨霉湿之地

我仍然在无人问津的阴雨霉湿之地

和着雨音 唱着没有听众的歌曲

人潮仍是漫无目的地向目的地散去

忙碌着 无为着 继续

等待着谁能够将我的心房轻轻叩击

等待着谁能够将我的心房轻轻叩击

即使是你 也仅仅驻足了片刻便离去

想着或许 下个路口会有谁与我相遇

哪怕只 一瞬的 奇迹

夏夜空 出现在遥远的记忆

夏夜空 出现在遥远的记忆

绽放的 璀璨花火拥着繁星

消失前 做出最温柔的给予

一如那些模糊身影的别离

困惑着 拘束着 如城市池中之鱼

困惑着 拘束着 如城市池中之鱼

或哽咽 或低泣 都融进了泡沫里

拖曳疲惫身躯 沉入冰冷的池底

注视着 色彩褪去

我仍然在无人问津的阴雨霉湿之地

我仍然在无人问津的阴雨霉湿之地

和着雨音 唱着没有听众的歌曲

人潮仍是漫无目的地向目的地散去

忙碌着 无为着 继续

祈求着谁能够将我的心房轻轻叩击

祈求着谁能够将我的心房轻轻叩击

今天的你 是否会留意并尝试去靠近

因为或许 下个路口仍是同样的结局

不存在 刹那的 奇迹

极夜与永昼

极夜与永昼

别离与欢聚

脉搏与呼吸

找寻着意义

我仍然在无人问津的阴雨霉湿之地

我仍然在无人问津的阴雨霉湿之地

和着雨音 唱着卖不出去的歌曲

浮游之人也挣扎不已执着存在下去

追逐着 梦想着 继续

请别让我独自匍匐于滂沱世末之雨

请别让我独自匍匐于滂沱世末之雨

和着雨音 唱着见证终结的歌曲

人们终于 结束了寻觅呆滞伫立原地

哭泣着 乞求着 奇迹

用这双手 拨出残缺染了锈迹的弦音

用这双手 拨出残缺染了锈迹的弦音

都隐没于淋漓的雨幕无声无息

曲终之时 你是否便会回应我的心音

将颤抖的双手牵起

迎来每个人的结局

点击右上角即可分享
微信分享提示