【0704】HL普及组模拟赛题解及反思

这篇博客回顾了一场HL普及组的模拟赛,包括质因数分解、蛇形螺旋矩阵、大采购等题目的题解和反思。博主指出在解题过程中的常见错误,如审题不仔细、模板题出错等问题,并提醒读者要注意细节,避免类似错误。
摘要由CSDN通过智能技术生成

ε=(´ο`*)))唉,这场考试
血亏~~~~~
——by一只可怜的蒟蒻┭┮﹏┭┮



1、质因数分解

【题目描述】
P l u t o Pluto Pluto 最近的数学水平正在迅速下降,连他自己都觉得已经没救了。现在, P l u t o Pluto Pluto 发现自己连最基本的质因数分解都不会做了,他只能来求助你。
【输入格式】
第一行一个正整数 t t t ,表示数据的组数。
接下来 t t t 行,每行一个正整数 n n n ,表示待分解的数。
【输出格式】
t t t 行。
每行若干个用空格隔开的正整数,从小到大排列,表示 n n n 的质因数分解结果。
【样例输入输出】
样例输入:(prime.in)

2
7
12

样例输出:(prime.out)

7
2 2 3

【数据规模与约定】
对于 30 % 30\% 30% 的数据, 2 ⩽ n ⩽ 1000000 2\leqslant n \leqslant 1000000 2n1000000
对于 60 % 60\% 60% 的数据, 2 ⩽ n ⩽ 1000000000 2\leqslant n \leqslant 1000000000 2n1000000000
对于 100 % 100\% 100% 的数据, 2 ⩽ n ⩽ 1000000000000 , t ⩽ 20 2\leqslant n \leqslant 1000000000000,t\leqslant 20 2n1000000000000,t20
【解析】
ε=(´ο`*)))唉,这模板题我都不想多说,直接用 “试除法” 和 “ E r a t o s t h e n e s Eratosthenes Eratosthenes 筛法 ” 分解质因数。扫描 2 ∼ ⌊ N ⌋ 2\sim \lfloor {\sqrt N}\rfloor 2N 的每个数 d d d , 若 d d d 能整除 N N N , 则从 N N N 中除掉所有的因子 d d d ,因为一个合数的因子一定在扫描到这个合数之前就从 N N N 中被除掉了,所以上述过程中能整除 N N N 的一定是质数。
特别地, 若 N N N 没被任何 2 ∼ N 2\sim {\sqrt N} 2N 的数整除, 则 N N N 是质数,无需分解。
时间复杂度: Θ ( N ) \Theta (\sqrt N) Θ(N )
【代码展示】

#include<bits/stdc++.h>
#define ud using namespace std
#define itn int
#define ll long long
ud;
int t;
ll n,m;
ll p[20000];
inline long long read()
{
   
	long long sum=0,flag=1;
	char c;
	for(;c<'0'||c>'9';c=getchar())if(c=='-') flag=-1;
	for(;c>='0'&&c<='9';c=getchar())sum=(sum<<1)+(sum<<3)+c-'0';
	return sum*flag;
}
int main()
{
   
	t=read();
	for(int i=1;i<=t;++i)
	{
   
		n=read();
		m=0;
		for(int i=2;i<=sqrt(n);++i)
		{
   
			while(n%i==0)// i 是质数
			{
   
				p[++m]=i;
				n/=i;//删去了 i 的倍数
			}
		}
		if(n>1)//如果 n 是质数
		{
   
			p[++m]=n;
		}
		sort(p+1,p+m+1);
		printf("%lld",p[1]);
		for(int i=2;i<=m;++i)
		printf(" %lld",p[i]);
		printf("\n");
	} 
	return 0;
}

总结:┭┮﹏┭┮,本蒟蒻因为没有换行,爆零了! 所以,看题要仔细,不然随时会翻车。

2、蛇形螺旋矩阵

【题目描述】
大家一定都听说过蛇形矩阵,也一定都听说过螺旋矩阵,但一定没有听说过蛇形螺旋矩阵。所谓蛇形螺旋矩阵,是非常类似于螺旋矩阵的一种矩阵。它们仅有的不同之处在于:螺旋矩阵总是按顺时针方向旋转并填入相应的数字,而蛇形螺旋矩阵每一圈的旋转方向是不固定的。
现在给出一个蛇形螺旋矩阵的大小,同时给出每一圈旋转的方向,请你制作出这个矩阵。(特别说明:第 i i i 圈的旋转是从 ( i , i ) (i,i) (i,i) 处开始的)
【输入格式】
第一行一个正整数 n n n ,表示蛇形螺旋矩阵的边长。
第二行 n + 1 2 \frac {n+1}{2} 2n+1 个整数,第 i i i 个数表示从外向内第 i i i 圈的旋转方向。 1 1 1 表示顺时针方向, − 1 -1 1 表示逆时针方向。
【输出格式】
输出共 n n n 行,每行 n n n 个用空格隔开的正整数,第 i i i 行第 j j j 个整数表示这个矩阵 ( i , j ) (i,j) (i,j) 处应填的整数。
【样例输入输出】
样例输入:(matrix.in)

7
1 -1 -1 1

样例输出:(matrix.out)

1 2 3 4 5 6 7
24 25 40 39 38 37 8
23 26 41 48 47 36 9
22 27 42 49 46 35 10
21 28 43 44 45 34 11
20 29 30 31 32 33 12
19 18 17 16 15 14 13

【数据规模和约定】
对于 50 % 50\% 50% 的数据, 1 ⩽ n ⩽ 100 1\leqslant n\leqslant 100 1n100
对于 100 % 100\% 100% 的数据, 1 ⩽ n ⩽ 1000 1\leqslant n\leqslant 1000 1n1000
【解析】
显然,这就是蛇形方阵的翻版,只要在此基础上增加一个顺时针的做法,然后判断一下即可。
特别地,如果 n n n 是奇数,那么最后只会放一个数,即在 ( n 2 + 1 , n 2 + 1 ) (\frac n 2+1,\frac n 2+1) (2n+1,2n+

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值