首页 > 其他分享 >CodeForces - 618A Slime Combining (快速幂)

CodeForces - 618A Slime Combining (快速幂)

时间:2023-05-08 21:31:59浏览次数:46  
标签:煤球 618A int slimes value slime CodeForces Combining row


CodeForces - 618A

Slime Combining


Time Limit: 2000MS

 

Memory Limit: 262144KB

 

64bit IO Format: %I64d & %I64u


Submit Status


Description



Your friend recently gave you some slimes for your birthday. You have n slimes all initially with value 1.

You are going to play a game with these slimes. Initially, you put a single slime by itself in a row. Then, you will add the other n - 1 slimes one by one. When you add a slime, you place it at the right of all already placed slimes. Then, while the last two slimes in the row have the same value v, you combine them together to create a slime with value v + 1.

You would like to see what the final state of the row is after you've added all n


Input



The first line of the input will contain a single integer, n (1 ≤ n ≤ 100 000).


Output



Output a single line with k integers, where k is the number of slimes in the row after you've finished the procedure described in the problem statement. The i-th of these numbers should be the value of the i-th slime from the left.


Sample Input



Input



1



Output



1



Input



2



Output



2



Input



3



Output



2 1



Input



8



Output



4


Hint



In the first sample, we only have a single slime with value 1. The final state of the board is just a single slime with value 1.

In the second sample, we perform the following steps:

Initially we place a single slime in a row by itself. Thus, row is initially 1.

Then, we will add another slime. The row is now 1 1. Since two rightmost slimes have the same values, we should replace these slimes with one with value 2. Thus, the final state of the board is 2.

In the third sample, after adding the first two slimes, our row is 2. After adding one more slime, the row becomes2 1.

In the last sample, the steps look as follows:

  1. 1
  2. 2
  3. 2 1
  4. 3
  5. 3 1
  6. 3 2
  7. 3 2 1
  8. 4


Source


Wunder Fund Round 2016 (Div. 1 + Div. 2 combined)


//题意;


给出一个数n,表示有n个价值为1的煤球,现在,有一个合并规则,先将一个煤球放在最左边,其他的依次放在前一个的右边,如果新放的煤球的价值与左边的煤球的价值一样的话,都为v,那么就将这两个煤球合并成一个价值为v+1的煤球,就这样一直放,直到所有煤球放完为止,从左至右输出合并后的煤球的价值。


//思路:合并后的煤球从左到右价值肯定是递减的。


可以说是一个规律题,先判断第一位的值,如果这一位的数是k,那么至少得2^(k+1)个煤球,则n-=(2^(k+1)),然后依次往后退就行了。直到n为0.


#include<stdio.h>
#include<string.h>
#include<algorithm>
#define INF 0x3f3f3f3f
#define ll long long
#define N 10010
#define M 1000000007
#define PI acos(-1.0)
using namespace std;
int a[N];
int kp(int n,int k)
{
	ll s=1;
	while(k)
	{
		if(k&1)
			s*=n;
		n*=n;
		k/=2;
	}
	return s;
}
int main()
{
	int i,j,k;
	int nn,n;
	while(scanf("%d",&nn)!=EOF)
	{
		n=nn;
		int kk=0;
		while(n)
		{
			int k=0;
			int m=kp(2,k);
			while(m<=n)
			{
				k++;
				m=kp(2,k);
			}
			a[kk++]=k;
			n-=kp(2,k-1);
		}
		for(i=0;i<kk-1;i++)
			printf("%d ",a[i]);
		printf("%d\n",a[kk-1]);
	}
	return 0;
}



标签:煤球,618A,int,slimes,value,slime,CodeForces,Combining,row
From: https://blog.51cto.com/u_16079508/6256254

相关文章

  • CodeForces - 626B Cards (全排列&模拟)
    TimeLimit: 2000MS MemoryLimit: 262144KB 64bitIOFormat: %I64d&%I64uCodeForces-626BCardsSubmit StatusDescriptionCatherinehasadeckof ntakeanytwo(notnecessarilyadjacent)cardswithdifferentcolorsandexchangethemforanewcardof......
  • CodeForces - 597A Divisibility (模拟)
    TimeLimit: 1000MS MemoryLimit: 262144KB 64bitIOFormat: %I64d&%I64uCodeForces-597ADivisibilitySubmit StatusDescriptionFindthenumberof k-divisiblenumbersonthesegment [a, b].Inotherwordsyouneedtofindthenumberofsuchintegerv......
  • Codeforces Round 871 (Div. 4)
    A.LoveStory#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongintread(){intx=0,f=1,ch=getchar();while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();if......
  • Codeforces Round 871 (Div. 4)
    A.LoveStory题意:给定n个长度为10的字符串,问其与codeforces字符串的对应下标字母不同的个数。分析:对于每个字符串从前往后依次和“codeforces”对应字符比较然后统计不同字母数即可code:#include<bits/stdc++.h>usingnamespacestd;intmain(){ std::ios::sync_wit......
  • Codeforces Round 871 (Div. 4)
    CodeforcesRound871(Div.4)A-LoveStory#include<bits/stdc++.h>usingnamespacestd;typedefpair<int,int>PII;typedefpair<string,int>PSI;constintN=1e5+5,INF=0x3f3f3f3f,Mod=1e6;constdoubleeps=1e-6;typedeflonglongll;i......
  • Codeforces 871 div4(重拳出击)
    Codeforces871div4ABC简单题D题意每次操作可以将当前的数分成两份,一份是\(\frac{1}{3}\),一份是\(\frac{2}{3}\),问当前数n可否进行若干次操作,最终出现一份大小为m的片。递归一下就好了,数据最大才\(10^7\)代码voiddfs(intx){ if(x==m){flag=1;return;} if(flag)re......
  • Codeforces Round 870 (Div. 2)
    CodeforcesRound870(Div.2)A-TrustNobody思路:枚举每一种说谎人数x,若a[i]大于x则说谎人数加一,判断最后说谎总人数是否为x,若是则输出x,结束枚举;若没有满足的x则-1#include<bits/stdc++.h>usingnamespacestd;typedefpair<int,int>PII;typedefpair<string,int>PSI;......
  • Codeforces 1817F - Entangled Substrings(SA)
    为什么赛时不开串串题?为什么赛时不开串串题?为什么赛时不开串串题?为什么赛时不开串串题?为什么赛时不开串串题?一种SA做法,本质上和SAM做法等价,但是说来也丢人,一般要用到SAM的题我都是拿SA过的/wul考虑将\(ac\)看作一个整体。记\(\text{occ}(S)\)为\(S\)出现位置的集......
  • Codeforces Round 848 (Div. 2)C
    B.TheForbiddenPermutation一定要注意题目中说的是对于alli满足才算不好的,我们做的时候只要破坏一个i这个a就不算好的了,被这一点坑了,没注意到all。#include<bits/stdc++.h>usingnamespacestd;typedeflonglongLL;constintN=2e5+10;intp[N],a[N];vo......
  • Codeforces Round 856 (Div. 2)C
    C.ScoringSubsequences思路:我们想要找到满足的最大值的长度最长的的区间,因为单调不减,所以更大的数一定在最大值的里面包含,所以我们用两个指针维护这样一个满足当前i的最大值区间,当新来一个数,这时我们答案里面一定要包含这个数,我们看能否保持这个长度,能不能保持需要看j指针所指......