首页 > 其他分享 >P9573 「TAOI-2」核心共振

P9573 「TAOI-2」核心共振

时间:2023-08-22 19:46:37浏览次数:39  
标签:P9573 TAOI int scanf d% cdots 余数 共振

思路

这道题最开始没发现数列必须是 \(1,2,3,\cdots,n\),然后直接交了个输出 \(n\) 遍 \(p\) 的代码。我真的好蠢啊

后面才发现这一点,于是开始思考,首先从 \(p\) 比较小的情况。

如果 \(p\) 是 \(1\) 的话,那显然直接输出 \(1,2,3,\cdots,n\) 就好了。

如果 \(p\) 是 \(2\) 的话,显然奇数和偶数放在一次效果最佳。

如果 \(p\) 是 \(3\) 的话,那 \(3\) 的倍数放一次,余数是 \(1\) 和 \(2\) 交替放在一次最好。

至此,我们便发现了一个大致解法,就是余数为 \(0\) 的应当放在一起,余数和为 \(p\) 的应当放在一起,才能最大化共振次数。

55pts 代码

#include<bits/stdc++.h>
using namespace std;
int T,n,p,t;
int main()
{
	scanf("%d",&T);
	while(T--)
	{
		scanf("%d%d",&n,&p),t=p;
		if(n==1){printf("%d\n",1);continue;}//当时没想好的时候特判的,后面懒得删了
		for(int i=0;i<p;++i)
		{
			for(int j=0;j*t+i<=n;++j)
			{
				if(!i&&!j) continue;//对于0的特殊情况
				if(i==0||t-i==i) printf("%d ",j*t+i);//余数为0和p/2的情况不需要交替输出
				else
				{
					printf("%d ",j*t+i);
					if(j*t+t-i<=n) printf("%d ",j*t+t-i);//后面一个可能会比前一个少一个,注意判断
				}
			}
			if(i!=0&&t-i!=i)--p;//重复的需要减了(绝对不是我懒得去算到底有多少次)
		}
		puts("");
	}
	return 0;
}

居然 TLE 了,想了一下,我这个第一层最多是 \(p\),第二层最多是 \(\frac{n}{p}\) 乘起来不就 \(n\) 吗?

一看数据范围,\(\sum n\) 最大也才 \(3\times10^5\) 怎么会 TLE 呢。

就在我百思不得其解的时候,突然看到样例最后一组,\(p\) 比 \(n\) 大,所以共振次数必定是 \(0\),然后一看 \(p\) 的范围,居然有 \(10^8\),这样一看,如果每次都是 \(p\) 都比 \(n\) 大,那复杂度就是 \(O(p)\) 了,再乘以个 \(T\),超时是必然的。

所以循环的时候再加个 \(min(n+1,p)\) 就好了。

AC 代码

#include<bits/stdc++.h>
using namespace std;
int T,n,p,t;
int main()
{
	scanf("%d",&T);
	while(T--)
	{
		scanf("%d%d",&n,&p),t=p;
		if(n==1){printf("%d\n",1);continue;}
		for(int i=0;i<min(n+1,p);++i)//与上面的没什么区别,就这里改了
		{
			for(int j=0;j*t+i<=n;++j)
			{
				if(!i&&!j) continue;
				if(i==0||t-i==i) printf("%d ",j*t+i);
				else
				{
					printf("%d ",j*t+i);
					if(j*t+t-i<=n) printf("%d ",j*t+t-i);
				}
			}
			if(i!=0&&t-i!=i)--p;
		}
		puts("");
	}
	return 0;
}

标签:P9573,TAOI,int,scanf,d%,cdots,余数,共振
From: https://www.cnblogs.com/One-JuRuo/p/17649521.html

相关文章

  • 「TAOI-2」Break Through the Barrier 题解
    前言:比赛前去做牙齿矫正,回来晚了10分钟……做比赛的运气全用在了一路绿灯上了(无语)。第二题切了两个半小时。决定写篇题解来抒发一下再记得愤怒愉悦之情。AC的想法很简单,就是表示出每一串连续的\(\texttt{T}\),其长度分别为\(l_1\liml_m\)。明显的,对于任何一个\(l_i\),在一......
  • 首先是量血压、抽血化验、尿检,接着是CT、心电图、彩超、磁共振、多普勒
    进医院首先是量血压、抽血化验、尿检,接着是CT、心电图、彩超、磁共振、多普勒,因为在这之前根本就没有住过院,也没有输过液,不知道都有哪些手续,再加上摸东不知西,搞得人晕头转向,好在自己有一张暂时还能说话的嘴,不清楚就多问,总算过了一关又一关! 自从学了计算机,做了鼻炎手术,我妈把我......
  • 『STAOI』G - Round 3
    『STAOI』G-Round3因为在\(STAOI\)团里,所以赛时没打。\(T1\)luoguP9508『STA-R3』存在观察题意,手搓几组样例,易知符合题意的一组解形如\(a,b,b,c,b,b,……,z,(b),(b)\)。不会证明,可以参考下隔壁jijidawang的。时间复杂度\(O(n)\),可以通过本题。#include<bi......
  • 产业共振 智能涌现!8月16日飞桨携手生态伙伴带来大模型企业应用创新实践
    当前,人工智能已经成为新一轮科技革命和产业变革的重要驱动力量,基于强算法、大算力和大数据的大模型成为人工智能发展的主流方向。AI大模型已经从拼参数发展到拼应用,进入大规模可复制的产业落地阶段。飞桨深度学习平台和文心大模型一直致力于发挥算法模型基础技术优势,助力广大企业将......
  • 洛谷 P9221 「TAOI-1」Pentiment 题解
    Description给定\(n\timesm\)的矩阵,从第\(1\)行任意格子出发,每次向下、左、有走一步,有\(q\)个障碍不能经过,求走到第\(n\)行任意格子的方案。对于所有数据,\(1\leqn,m\leq10^9\),\(1\leqq\leq10^5\)。link:https://www.luogu.com.cn/problem/P9221Solution算法一考......
  • 阻尼涂层的细长板的共振数值模拟
    摘要精简讨论了薄壁结构弯曲振动的表面阻尼的经典方法,即阻尼涂层由两层具有显著粘弹性的材料和一层高模量材料的中间薄增强层组成。考虑到阻尼层的横向压缩,建立了具有整体阻尼涂层的细长板的四层有限元,建立了一个有限元控制方程组。材料特性1.作为阻尼涂层的材料,使用的是以......
  • 『STAOI』G - Round 2 半个游记
    很刺激。2023.3.223:17第一次过审。2023.3.500:02第一次打回。原因是背锅人的链接又双叒叕挂错了(((2023.3.621:20第二次过审。2023.3.8邀请到国际著名设计师FoZwoK重新设计头图。这是base64。2023.3.8撤下比赛,决定打造rated。2023.3.13T4被偷走,拿去准备其它公......
  • 共轭与共振
    frommanimimport*frame_width=config["frame_width"]frame_height=config["frame_height"]defnarrator(a):foriina:globals()[f't{str(i)}']=Text(a[i],font="STZhongsong").to_edge(DOWN).scale(0......
  • 基于平均不同分辨率的共振峰跟踪算法matlab仿真
    1.算法描述共振峰轨迹的自动跟踪算法,其特点是不借助于其它的信息来源,仅仅是基于语谱图信息,来确定语谱图上前四个共振峰频率的位置和它们关于时间轴的轨迹.算法由三个层......
  • 基于平均不同分辨率的共振峰跟踪算法matlab仿真
    1.算法描述       共振峰轨迹的自动跟踪算法,其特点是不借助于其它的信息来源,仅仅是基于语谱图信息,来确定语谱图上前四个共振峰频率的位置和它们关于时间轴的轨......