1 条题解

  • 0
    @ 2025-8-24 23:15:02

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar Clare613
    csacademy.com||宣:https://www.luogu.com.cn/team/103922||250粉后橙名就别找我了||目标一:黄+绿+蓝+紫+黑->431/888||目标二:2025J:320+,2025S:250+||个人题库已满

    搬运于2025-08-24 23:15:02,当前版本为作者最后更新于2025-04-27 18:45:01,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    思路

    第一步,分解 i=1n1i2\sum\limits_{i=1}^{n-1}i^2,可以得到 $\sum\limits_{i=1}^{n-1}i^2 = 1 + 2 + 2 + 3 + 3 + 3 + ...... + (n-1) + (n-1) + (n-1)$。
    第二步,构造数组,我们可以构造以下数组:

    1,n,2,n2,3......1 ,n ,2 ,n - 2 ,3......

    为什么呢?我们可以发现,相差为 11 的区间只有末尾那一个,相差为 22 的区间也只可以从末尾找到两个,因为相差为 22 的两个数后只剩下一个数了,以此类推。这样我们就可以得到代码了。

    code:

    #include<iostream>
    #include<queue>
    #define MOD 1000000007
    using namespace std;
    
    int main(){
        cin.tie(0)->sync_with_stdio(0);
        int T;
        cin>>T;
        while(T--){
    		int n;
    		cin>>n;
    		if(n%2==1){
    			for(int i=1;i<=n/2;i++){
    				cout<<i<<" "<<n-i+1<<" ";
    			}
    			cout<<n/2+1<<"\n";
    		}
    		else{
    			for(int i=1;i<=n/2;i++){
    				cout<<i<<" "<<n-i+1<<" ";
    			}
    			cout<<"\n";
    		}
    	}
    	return 0;
    }
    
    • 1

    信息

    ID
    11746
    时间
    1000ms
    内存
    512MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者