Codeforces Round #514 (Div. 2) C.Sequence Transformation(找規律)
阿新 • • 發佈:2018-11-08
題意:給定一個數字,找從1到n這n個數字的最大公約數,然後從這n個數字中去掉一個數字,使得去掉之後剩下的n-1個數字的最大公約數能比之前的大,每次都去掉一個數字,使得最大公約數能夠最快的上升。
思路:列出1到9的答案:1:1,2:12,3:113,4:1124,5:11124,6:111226,7:1111226,8:11112248,9:111112248。排除3,6,7,容易發現,1的個數是n/2向上取整,2的個數是n/2/2。所以可以每一次讓n/2,如果最後是3,那麼就
輸出ans ans ans*3。
#include<bits/stdc++.h> using namespace std; #define inf 0x3f3f3f3f #define ll long long const int maxn=200005; const double eps=1e-8; const double PI = acos(-1.0); #define lowbit(x) (x&(-x)) ll gcd(ll a,ll b) { return b==0?a:gcd(b,a%b); } int main() { std::ios::sync_with_stdio(false); int n; while(cin>>n) { int ans=1; while(n) { if(n==3) { cout<<ans<<" "<<ans<<" "<<ans*3<<endl; break; } else { for(int i=0;i<(n+1)/2;i++) { cout<<ans<<" "; } if(n/2==0) cout<<endl; } ans*=2; n/=2; } } return 0; }