1 条题解

  • 0
    @ 2026-7-3 9:31:07

    题目传送门: P2320 [HNOI2006] 鬼谷子的钱袋

    思路

    所以我认为这道题是构造题。

    显然可以发现随着 nn 增大答案是单调不降的。

    而且要求 [1,n][1,n] 都可以造出来。举例来说一组构造 p(c)=p(a)+bp(c) = p(a)+b ,其中 c=a+bc=a+b,为了合法需要满足 b=a or a+1b=a ~or~ a+1

    代码

    #include<bits/stdc++.h>
    #define int long long
    using namespace std;
    int ans[50],cnt;
    void findf(int x){
    	ans[++cnt]=(x+1)/2;
    	if(x==1) return;
    	findf(x-(x+1)/2);
    }
    signed main(){int n,tmp;
    	scanf("%d",&n); tmp=log2(n)+1;
    	cout << tmp << '\n'; findf(n);
    	sort(ans+1,ans+cnt+1);
    	for(int i=1;i<=tmp;i++) 
    	cout << ans[i] << ' ';
    	return 0;
    } 
    
    • 1

    信息

    ID
    739
    时间
    1000ms
    内存
    256MiB
    难度
    9
    标签
    (无)
    递交数
    11
    已通过
    6
    上传者