专栏文章

题解 - Wqh R13 - A

P1000题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mink4a6o
此快照首次捕获于
2025/12/02 03:43
3 个月前
此快照最后确认于
2025/12/02 03:43
3 个月前
查看原文
如果没有代码出现的话,请刷新

0 分的可能

  • 没开 long long。
  • kk 可能为负数。
  • 没特判 n=1n=1
  • 输出空格写成换行。
  • 没写代码或乱写代码。
  • 脑残。

30 分做法 - O(Q×nQ \times n)

暴力递推求出每次答案。
CPP
#include<bits/stdc++.h>
#define int long long
using namespace std;
int a[10000005];
signed main(){
	int q,k;
	cin>>q>>k;
	while(q--){
		int n;
		cin>>n;
		a[1]=5;
		for(int i=2;i<=n;i++){
			if(i%2==0) a[i]=a[i-1]+1;
			else a[i]=a[i-2]+k;
		}
		cout<<a[n]<<" ";
	}
	return 0;
}

60 分做法 - O(Q+max(n)Q + \max(n))

在 30 分做法上加上预处理,避免重复计算。
CPP
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=1e7+5;
int a[10000005];
signed main(){
	int q,k;
	cin>>q>>k;
	a[1]=5;
	for(int i=2;i<=maxn;i++){
		if(i%2==0) a[i]=a[i-1]+1;
		else a[i]=a[i-2]+k;
	}
	while(q--){
		int n;
		cin>>n;
		cout<<a[n]<<" ";
	}
	return 0;
}

100 分做法 - O(QQ)

直接找规律,第 1,3,5,71,3,5,7 个数分别是 5,5+k×1,5+k×2,5+k×35,5+k \times 1,5+k \times 2,5+k \times 3 \cdots,推出:
An=5+(n2)÷2×k(nmod2=1)A_n=5+(n-2) \div 2 \times k (n \bmod 2 = 1)
因为 Ai(imod2=0)=Ai1+1A_i(i \bmod 2 = 0)=A_{i-1}+1,所以:
An=6+(n2)÷2×k(nmod2=0)A_n=6+(n-2) \div 2 \times k (n \bmod 2 = 0) CPP
#include<bits/stdc++.h>
#define int long long
using namespace std;
signed main(){
	int q,k;
	cin>>q>>k;
	while(q--){
		int n;
		cin>>n;
		if(n%2==0) cout<<6+(n-2)/2*k<<" ";
		else cout<<5+(n-1)/2*k<<" ";
	}
	return 0;
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...