首页 > 其他分享 >Codeforces Round 887 (Div. 2)

Codeforces Round 887 (Div. 2)

时间:2023-07-31 16:15:55浏览次数:47  
标签:... 887 int Codeforces mid ans Div

Codeforces Round 887 (Div. 2)

A. Desorting

题目大意

给出一个长度为 \(n\) 的数组 \(a\) ,可以执行这个操作任意次。

选择一下标 \(i\), 使得 \(a_{1...i}\) 加上 \(1\) ,\(a_{i+1...n}\) 减少 \(1\)。

问最少几次操作使得数组 \(a\) 无序。

思路

首先如果 \(a\) 原本就无序的话是输出 \(0\)。

如果有序我们不妨进行如下操作:

找出最小的相邻两数差,对于以上说的操作我们可以画图


我们找到最小极差,将蓝色的方格当成 \(i\) 进行 \(\frac{x}{2}\) 次操作使得两个有颜色的方格持平,然后+1使得红色高度大于蓝色高度。

所以答案就是 \(\frac{\min\{a_i-a_{i-1}\}}{2}+1\)

int ans = 1e9 + 7;
for (int i = 1; i < n; i++)
    ans = min(ans, a[i] - a[i - 1]);
cout << ans / 2 + 1 << endl;

B - Fibonaccharsis

题目大意

给两个正整数 \(n,k\) 问有多少个斐波那契数列的第 \(k\) 项为 \(n\).

思路

斐波那契额最小是 \(0,1,1,2,3...\) 到第 \(28\) 项就超过 \(2e5\) 了,所以超过 \(28\) 直接输出 \(0\)

设第一位 \(x\),第二位 \(y\) 接下来为

\[x+y,x+2y,2x+3y,3x+5y... \]

我们可以直接预处理出正常的斐波那契额数列 \(\text{F}\)

带进去可得第 \(k\) 项 \(n=F[k-2]x+F[k-1]y\)

枚举其中的一个值 \(x\), 如果 \((n-F[k-2]x)\bmod F[k-1]=0\) 那么答案加一

int ans = 0;
f[1] = f[2] = 1;
for (int i = 3; i <= 30; i++)
    f[i] = f[i - 1] + f[i - 2];
for (int i = 0; i * (f[k - 2] + f[k - 1]) <= n; i++)
{
    int temp = n;
    temp -= i * f[k - 2];
    if (temp % f[k - 1] == 0)
        ans++;
}

C-Ntarsis' Set

题目大意

已知一个集合 \(S={1,2,3...,10^{1000}}\) ,同时有一个长度为 \(n\) 的序列 \(a\) ,表示我们每次都要删除 \(S\) 中的第 \(a_i\) 项,求经过 \(k\) 次操作后最小的数字

思路

我们发现只有当一个数比它小的数都删完后它有成为答案的机会,所以我们 \(check\) 掉比它小的数,然后如果比它小的值都去掉了,那么就记录答案,否则就将答案范围放大

bool check(LL k, LL mid)
{
    while (k--)
        mid -= lower_bound(a + 1, a + n + 1, mid) - a - 1;
    return mid > 1;
}
  while (l + 1 < r)
  {
      LL mid = (l + r) >> 1;
      if (check(k, mid))
          ans = mid, r = mid;
      else
          l = mid;
  }

标签:...,887,int,Codeforces,mid,ans,Div
From: https://www.cnblogs.com/ljfyyds/p/17593699.html

相关文章

  • Codeforces Round 888 (Div. 3)
    传送门AEscalatorConversations读懂题意即可/*Author:north_hFile:A.cppTime:2023/7/26/12:32____________||_||__||__|'_\/_\|'__|__|'_\|'_\|......
  • CF1855B Longest Divisors Interval 题解
    原题链接:https://codeforces.com/contest/1855/problem/B题意:给定一个正整数n,找到满足该条件的区间[l,r]的长度的最大值:对于任意l<=i<=r,n均为i的倍数(多组数据)。思路:如果n是奇数,答案显然是1,因为任意两个连续的正整数一定会有一个2的倍数。将这一结论进行推广:......
  • Codeforces Round 889 (Div. 2) C1 - C2
    Problem-C1-CodeforcesProblem-C2-Codeforces题意:​ 有\(n\)个数字,可以选择任意两个位置\(i,j\)进行操作,使得\(a_i=a_i+a_j\)(也即是把\(a_j\)加到\(a_i\)上),输出任意操作方案使得数组最后是不降的。esay-version要求在50次操作内完成,hard-version要求在31次操作内完成。......
  • Codeforces #889 div2 B
    B.LongestDivisorsInterval做法:假设我们找到了一个最大区间[l,r],这个区间的长度为k,那么这个区间里有一个数必定是k的倍数(自己举个例子就能知道了),因此n也是k的倍数。那么我们再缩小一下区间长度,变为k-1,这个区间可以是[l,r-1],也可以是[l+1,r],这其中必定有一个数是k-......
  • Codeforces Round 889 (Div. 2) 题解
    \(6\)题只做出来\(1\)题,损失惨重A.DaltontheTeacher显然,答案一定和最初的不满意人数有关,所以输入的时候统计一下然后,将不满意的人的座位每两个人交换一次即可,交换次数就是答案如果不满意人数是奇数,那么答案还要加\(1\)时间复杂度\(O(n)\)(输入的复杂度)B.LongestD......
  • CF1855B Longest Divisors Interval 题解
    题意:给定一个数\(n\),求一个连续区间\([l,r]\)使得\(n\)是区间内每个数的倍数,最大化这个区间的长度(多组数据)。思路:逆向思考一波,(如果一个数\(x\)不是\(n\)的因数,那么\(x\)的倍数不能在区间内。举个例子,比如$n$是13,3不是13的因数,\(3,6,9,12\)也就不可能出现......
  • Codeforces Round 889 (Div. 1) 题解
    A1.Dual(EasyVersion)https://codeforces.com/contest/1854/problem/A1题意给定一个长度为\(n\)的序列\(a_1,a_2,\dots,a_n\),你可以做以下操作:选定两个下标\(i,j(1\leqi,j\leqn)\),\(i,j\)可以相同,然后\(a_i\leftarrowa_{i}+a_j\)。要求构造一种操作......
  • Round 889 Div.2 意识流简记。
    太丢人了!D2D狂吃6发罚时,D2C都不会!不过无所谓,反正老年选手就是打着玩。D2A.答案为\(\lceil\frac{\sum_{i=1}^n[a_i=i]}{2}\rceil\)。D2B.我不会啊,猜了一下只需要枚举\(\le2000\)的,莫名其妙过了。D2C1/C2.不会。D2D.考虑动态维护前\(i\)个能凑出的数的集合,适时......
  • Codeforces Round 105 (Div. 2) - D. Bag of mice DP 或 记忆化搜索 求概率
    D.Bagofmice题意待补充~思路可利用DP或者记忆化搜索求解本问题,实际上这两个方法等价。当\(w=0\)时必输当$w\ne0$但$b=0$时必赢剩下的情况,先考虑一个问题:赢的局面是怎么构成的?代码记忆化搜索//>>>Qiansui#include<bits/stdc++.h>#definelllong......
  • Educational Codeforces Round 152 (Rated for Div. 2)
    传送阵T1MorningSandwich题目大意\(t\)个测试,每个测试给三个正整数\(b,c,h\),分别表示面包和两种馅料的个数,每两个面包之间必须放一个馅料,问最多能摆几层?思路我们发现\(c,h\)所表示的两种馅料其实相差不大,所以我们可以分两种情况\(a>c+h\)因为开头总是面包,所以要+......