首页 > 其他分享 >CF Round 815 Div2 题解

CF Round 815 Div2 题解

时间:2022-08-19 22:24:33浏览次数:90  
标签:10 return int 题解 CF cin leq dfrac 815

A题 Burenka Plays with Fractions(签到)

给定 2 个分数 \(\dfrac{a}{b},\dfrac{c}{d}\),现在可以自行进行操作,每次选定一个分数,将其分子或者分母乘上一个数,问至少需要多少次操作才能使得两个分数的值相同?

\(T\leq 10^4,0\leq a,c\leq 10^9,1\leq b,d\leq 10^9\)

对于 \(a,c=0\) 的情况特判一下,省的下面额外处理。

至多只需要两次操作即可(\(\dfrac{a}{b}=\dfrac{ad}{bc}*\dfrac{c}{d}\)),所以我们只需要检查 0,1,2 三种情况即可:

  1. 0 次操作:两个数的值相同
  2. 1 次操作:\(ad,bc\) 中有一个是另一个的倍数
  3. 2 次操作:不存在倍数关系
#include<bits/stdc++.h>
using namespace std;
#define LL long long
LL solve() {
    LL a, b, c, d;
    cin >> a >> b >> c >> d;
    if (a == 0) return c != 0;
    if (c == 0) return a != 0;
    //
    LL x = a * d, y = b * c;
    if (x == y) return 0;
    if (x % y == 0 || y % x == 0) return 1;
    return 2;
}
int main() {
    int T;
    cin >> T;
    while (T--) cout << solve() << endl;
    return 0;
}

B题 Interesting Sum(思维)

记一个序列的价值为:一个序列的最大值减去最小值。

给定一个长度为 \(n\) 的数组 \(\{a_n\}\),要求从中选取出一个连续子序列 \([l,r]\)(非空,但是不可以是原数组本身),然后剩下来的那些数重新组成新数列,求出这两个序列的价值和的最大值可能是多少。

\(4\leq n\leq 10^5,1\leq a_i\leq 10^9\)

记整个数组的最大值,次大值,最小值,次小值分别为 \(a,b,c,d\),那么价值的可能最大值是 \(a+b-c-d\),而这个值总是能取到的:让这个子序列恰好包含一个大值和小值即可。

#include<bits/stdc++.h>
using namespace std;
const int N = 100010;
int n, a[N];
int main() {
    int T;
    cin >> T;
    while (T--) {
        cin >> n;
        for (int i = 1; i <= n; ++i) cin >> a[i];
        sort(a + 1, a + n + 1);
        cout << a[n] + a[n - 1] - a[1] - a[2] << endl;
    }
    return 0;
}

C题 Corners(思维)

题意略,建议参照原题面。

答案的上限值是 1 的数量,我们看看啥情况会变得少一些。

注意到,如果存在着两个连续相邻的 0,那么答案就是 1 的数量:因为这保证了每次选定一个 L,都能保证里面有且仅有一个 1。

又因为一次 L 操作后一定会使得图上出现相邻 1,那么我们只需要尽可能减少第一轮消灭的 1 的数量即可:

  1. 全 1 状态下,一轮至少需要消灭三个
  2. 一轮只消灭一个,说明有相邻 0 或者对角 0
  3. 其他情况,一轮都得消灭两个
#include<bits/stdc++.h>
using namespace std;
const int N = 510;
char s[N][N];
bool check(int x, int y) {
    if (s[x][y] == '1') return false;
    return s[x][y + 1] == '0' || s[x + 1][y] == '0' || s[x + 1][y + 1] == '0' || s[x + 1][y - 1] == '0';
}
int solve() {
    memset(s, 0, sizeof(s));
    //read
    int n, m;
    scanf("%d%d", &n, &m);
    for (int i = 1; i <= n; ++i)
        scanf("%s", s[i] + 1);
    //solve
    int tot = 0;
    for (int i = 1; i <= n; ++i)
        for (int j = 1; j <= m; ++j)
            if (s[i][j] == '1') ++tot;
    if (tot == n * m) return tot - 2;
    for (int i = 1; i <= n; ++i)
        for (int j = 1; j <= m; ++j)
            if (check(i, j)) return tot;
    return tot - 1;
}
int main() {
    int T;
    scanf("%d", &T);
    while (T--) printf("%d\n", solve());
    return 0;
}

标签:10,return,int,题解,CF,cin,leq,dfrac,815
From: https://www.cnblogs.com/cyhforlight/p/16603479.html

相关文章

  • Codeforces #815 Div.2
    A—BurenkaPlayswithFractions思路:数论O(1)见题解题解:#include<iostream>#include<cstring>#include<algorithm>usingnamespacestd;typedeflonglongL......
  • 嘿嘿,天城大人嘿嘿嘿——苍与红的试炼 题解
    苍与红的试炼嘿嘿天城大人,嘿嘿天城大人您要怎么蹂躏我嘿嘿。众所周知,我是老指挥官了,所以看到这道题异常兴奋。然而我发现这道题好像是改编题,网上找不到题解,怎么能冷落天......
  • 状压DP-1815. 得到新鲜甜甜圈的最多组数
    问题描述有一个甜甜圈商店,每批次都烤 batchSize 个甜甜圈。这个店铺有个规则,就是在烤一批新的甜甜圈时,之前所有 甜甜圈都必须已经全部销售完毕。给你一个整数batchSi......
  • CF1196D2 RGB Substring (hard version)
    https://www.luogu.com.cn/problem/CF1196D2前缀和黄色题思路:看当前输入要被修改的这个字符串的第i位,是否与'R','G','B'三个中的一个相等,不相等的另外两个则增加一次修......
  • Educational Codeforces Round 117 (Rated for Div. 2) CF1612
    https://codeforces.com/contest/1612VP过了A~E,感觉海星。F,G这几天补。主要是luogu有翻译拯救了英语不好的我。A一眼\(x+y\equiv0\pmod{2}\),否则无解。那么显......
  • CF896E Welcome home, Chtholly
    题面维护一个\(n(n\leqslant100000)\)个元素序列\(a_1,a_2,\dots,a_n\),有\(m(m\leqslant100000)\)次操作,分为如下两种。给定\(l,r,x\),将\(a_l,a_{l+1},\dots,a_r\)中......
  • CF1092E. Minimal Diameter Forest
    \(\texttt{Difficulty:2000}\)题意给定\(n(1\len\le1000)\)个点,\(m(0\lem\len-1)\)条边组成的森林,现在增加一些边,是森林成为一棵树,并且其直径最小,求最小直径以及......
  • 【题解】[FARIO2013]Torusia
    通信题,小A和小B迷失在\(4096\times4096\)的方阵中。方阵是循环的,比如\((0,4095)\)的右边是\((0,0)\),上面是\((4095,4095)\)。两人都不知道自己的绝对位置。每......
  • 桐柏邀请赛 S10 题解
    EnchantedLove记\(S=a_1+a_2+\cdots+a_n\),那么:若\(S\)为偶数,则答案为\(\frac{S}{2}\)。否则,我们找到\(a\)中最小的奇数(显然此时\(a\)中必然有至少一个奇数),设......
  • Codeforces Round #815 (Div. 2) 全解
    目录ABCD1D2EAad和cb,查看是不是相等或者倍数关系,特判0Bsort()cout<<a[n]+a[n-1]-a[1]-a[2]C查看所有的四方格一个四方格有2个0,ans=1的个数一个四方格有1个0,ans=1......