找规律

题目大意

给定 ,求按照题目给定的操作,至少多少次才会有

解法

找规律,先来看看一次操作(这里的操作是指对整个文本框都复制), 的个数就变成了 个,两次操作后, 的个数变成了 个,我们不妨可以推理一下,对于整个文本框都复制的情况下,个数是由 的次方增长的,比如第 次此操作后, 的个数变成了 次方个。

而题目中要求是 个,不是求比 大时的次数,是不是上面的规律就没用了吗?

注意题目中的一小段:

部分或全部

假设 是距离 最近的 次方的数,那么我们只需要在文本框中找到 个字符复制出来即可,所以问题就转变成找到最小的比 大的 次方的数。

我们只需要预处理出 次方的数(在 ),然后再跑一遍即可

展示代码:

//
#include <bits/stdc++.h>
#define ll long long
#define LM LLONG_MAX
#define IM INT_MAX
#define IMN INT_MIN
#define LMN LLONG_MIN
#define tr true
#define fa false 

using namespace std;

const int Maxn = 1e2 + 1;
int ans[Maxn];
ll n, t;

int main(){
//  freopen(".in", "r", stdin);
//  freopen(".out", "w", stdout);
	ans[0] = 1;
  for(int i = 1; i <= Maxn; i++){
  	ans[i] = ans[i - 1] * 2;
  }
  cin >> t;
  while(t--){
  	cin >> n;
  	for(int i = 0; i <= Maxn; i++){
  		if(ans[i] >= n){
  			cout << i << endl;
  			break;
  		}
  		
  	}
  }
  return 0;
}  

如有错误,请指出,谢谢🙏