CF1584 总结

A Mathematical Addition

给出 \(u,v\) , 求方程\(\frac{x}{u}+\frac{y}{v}=\frac{x+y}{u+v}\)的一组整数解.

暴力合并分数可得:

\[xv^2+yu^2=0 \]

显然\(x=u^2,y=-v^2\)即可.注意防止爆int.

#include <iostream>
#include <cstdio>
using namespace std;
int T;
long long a, b, x, y;
int main()
{
    ios::sync_with_stdio(false);
    cin >> T;
    while (T--)
    {
        cin >> a >> b;
        x = a * a, y = b * b;
        cout << x << " " << -y << endl;
    }
}

B Coloring Rectangles

给出一个\(n \times m\)的矩形.初始全是红色,将其任意横竖划分成小矩形(不能是\(1\times 1\)),再将一些色块染成蓝色,使没有一个矩形里相邻块颜色相同.

由于任意划分,不妨尽量划分成\(1\times3\) 的块,保证一个蓝块覆盖两个红块.

注意竖直划分完之后还可以水平划分.

写的还是比较简洁的.

#include <iostream>
#include <cstdio>
using namespace std;
long long T, n, m;
long long solve(long long r, long long c)
{
    if (r == 1)
    {
        if (c % 3 == 0)
            return c / 3;
        else
            return c / 3 + 1;
    }
    if (r == 2 && c == 2)
        return 2;
    if (r % 3 == 0)
        return c * (r / 3);
    else
        return c * (r / 3) + solve(c, r % 3);
}
int main()
{
    ios::sync_with_stdio(false);
    cin >> T;
    while (T--)
    {
        cin >> n >> m;
        cout << min(solve(m, n), solve(n, m)) << endl;
    }
}

C Two Arrays

给两个序列a,b,问能否通过一次如下操作把a变成b:

使a中任意个数+1,然后随意改变a的顺序.

想复杂了,以为是二分图,画了几个样例发现很符合,但估计过不去.

yyq云:排序

然后就没有然后了.

#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const int N = 105;
int T, n;
int a[N], b[N];
int main()
{
    ios::sync_with_stdio(false);
    cin >> T;
    while (T--)
    {
        cin >> n;
        for (int i = 1; i <= n; i++)
            cin >> a[i];
        for (int i = 1; i <= n; i++)
            cin >> b[i];
        sort(a + 1, a + 1 + n);
        sort(b + 1, b + 1 + n);
        bool flag = true;
        for (int i = 1; i <= n; i++)
            if (a[i] != b[i] && a[i] + 1 != b[i])
            {
                cout << "NO" << endl;
                flag = false;
                break;
            }
        if (flag)
            cout << "YES" << endl;
    }
}

D Guess the Permutation

长度为n的序列\(a\)一开始满足\(a_i=i\),经过下面一次操作:

选择\(i,j,k\),将\([i,j-1]\)取反,\([j,k]\)取反.

每次可以向交互库询问区间逆序对数,最多询问40次.(\(n\leq 10^9\))

考场上英语不好,读了半天读不下去了,去做E,发现不可做,就弃赛了.

总结

这次比赛ABC均为结论题(感觉后面也有点像,但我不会),其中B题较有新意.A,C应该属于送分题难度,但是C却想复杂了,最后开题顺序问题导致只做了三个题.排了rk2000/10000,不太理想.以后要对一些奇怪的结论敢于尝试,快速写出代码或者快速hack掉,不能在证明上浪费太多时间.另外要把握题目难度,防止误判.

posted @ 2021-11-14 19:39  Kinuhata  阅读(62)  评论(0)    收藏  举报