CodeForces - 1469D - Ceil Divisions (思维+数学)

简介: 笔记

Ceil Divisions


题意

3.png

思路

4.png

代码

#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
#define mod 1000000007
#define endl '\n'
using namespace std;
typedef  long long LL;
typedef pair<int, int>PII;
inline LL gcd(LL a, LL b) { return b ? gcd(b, a % b) : a; }
const int N = 200010;
int n;
int a[N];
vector<int>v;
void solve() {
  cin >> n;
  v.clear();
  int cnt = 0;
  if (n <= 32) {
    for (int i = 3; i < n; ++i) {
      v.push_back(i);
      v.push_back(i + 1);
      cnt++;
    }
    int t = n;
    while (t != 1) {
      //printf("%d %d\n", n, 2);
      v.push_back(n);
      v.push_back(2);
      cnt++;
      t = ceil(double(t / 2.0));
      //cout << "t == " << t << endl;
    }
  }
  else {
    int x = ceil(pow(n, 1.0 / 5.0));
    for (int i = 3; i < n; ++i) {
      if (i != x) {
        //printf("%d %d\n", i, i + 1);
        v.push_back(i);
        v.push_back(i + 1);
        cnt++;
      }
    }
    int t = n;
    while (t != 1) {
      //printf("%d %d\n", n, x);
      v.push_back(n);
      v.push_back(x);
      cnt++;
      t = ceil(double((t * 1.0) / (x * 1.0)));
    }
    t = x;
    while (t != 1) {
      //printf("%d %d\n", x, 2);
      v.push_back(x);
      v.push_back(2);
      cnt++;
      t = ceil(double(t / 2.0));
    }
  }
  cout << cnt << endl;
  for (int i = 0; i < v.size(); ++i) {
    printf("%d ", v[i]);
    if (i & 1)cout << endl;
  }
}
int main() {
  int t; cin >> t;
  while(t--)
    solve();
  return 0;
}
目录
相关文章
|
8月前
|
人工智能
Codeforces1491——C.Pekora and Trampoline(差分思维+树状数组)
Codeforces1491——C.Pekora and Trampoline(差分思维+树状数组)
118 0
Codeforces1491——C.Pekora and Trampoline(差分思维+树状数组)
codeforces319——B. Psychos in a Line(思维+单调栈)
codeforces319——B. Psychos in a Line(思维+单调栈)
113 0
codeforces319——B. Psychos in a Line(思维+单调栈)
codeforces1013——D. Chemical table(思维+转化+并查集)
codeforces1013——D. Chemical table(思维+转化+并查集)
96 0
|
人工智能
[Codeforces 1589D] Guess the Permutation | 交互 思维 二分
题意 多组输入:{ 每组给出一个n,有一个长度为n的数列,在开始的时候a i = i ,有三个数i , j , k 数列反转了 [i,j−1] [j,k] 要求出这三个数,可以对系统进行询问 [ l , r ] 区间内 逆序对 的个数,会返回这个值 }
134 0
|
机器学习/深度学习 物联网
[Codeforces 1586] Omkar and Determination | 思维前缀和
题意 给定一个n ∗ m 的方格,在这个方格中有一些点被标记为′ . ′ 说明这个点是没有障碍的,而′ X ′ 代表这个点是有障碍的,不能通过这个点,对于每个点,只能向上或者是向左走。如所说有的′ . ′ 点不能走出去,那么这样的′ . ′ 点就不是e x i t a b l e exitable 问题是:给定一个矩阵里面所有的 exitable点,如果给出的矩阵能够唯一确定,就是YES,否则输出 NO 所以问题就变成了给定的矩阵范围中有没有是′ . ′但是不能够 exitable的点,如果有就无法唯一确定(YES),反之就可以唯一确定(NO) 数据范围太大,可以开 vector 来模拟二维数
609 0

热门文章

最新文章