首页 > 其他分享 >Codeforces Round 836题解(A、B、C)

Codeforces Round 836题解(A、B、C)

时间:2024-06-15 15:54:05浏览次数:10  
标签:836 int 题解 位置 Codeforces cdots bigoplus frac 倍数

A. SSeeeeiinngg DDoouubbllee

直接将原字符串翻转一下拼到原字符串的后面就构成了回文串。

string s;

void solve() {
    cin >> s;
    cout << s;
    reverse(s.begin(), s.end());
    cout << s << '\n';
}

B. XOR = Average

分\(n\)的奇偶性考虑,若\(n\)为奇数,我们可以让所有的\(a_i\)相等,这样\(a_1 \bigoplus a_2 \bigoplus \cdots \bigoplus a_n = a_1 = \frac{n \cdot a_1}{n}\)。若\(n\)为偶数,我们可以考虑可否将\(n\)为奇数时的某个\(a_i\)拆成两个\(a_{i_1}\)和\(a_{i_2}\),使得\(a_{i_1} \bigoplus a_{i_2} = a_i\)并且\(\frac{a_{i_1} + a_{i_2}}{2} = a_i\),这样就仍然满足\(a_1 \bigoplus a_2 \bigoplus \cdots \bigoplus a_n = a_1 = \frac{n \cdot a_1}{n}\)。容易发现\(1\)和\(3\)就刚好满足这样的限制,\(1 \bigoplus 3 = 2\)并且\(\frac{1 + 3}{2} = 2\)。

int n;

void solve() {
    cin >> n;
    if (n & 1) {
        for (int i = 1; i <= n; i ++) {
            cout << 1 << ' ';
        }
        cout << '\n';
    }
    else {
        cout << 1 << ' ' << 3 << ' ';
        for (int i = 1; i <= n - 2; i ++) {
            cout << 2 << ' ';
        }
        cout << '\n';
    }
}

C. Almost All Multiples

如果\(1\)这个位置放的是\(n\),那么一定是可以构造出来一个排列的,并且字典序最小的排列就是除了\(1\)和\(n\)这两个位置外的其他位置\(i\)都放\(i\)。

排放形式如下:
n 2 3 4 5 6 7 8 9 10 11 1(\(n\)取\(12\)的情况)

如果\(1\)这个位置放的不是\(n\),譬如说是\(x\),那么我们就必须把\(x\)这个位置后面的是\(x\)的倍数的数放到\(x\)这个位置,并在那个数的位置上放上新的数。

那么如果\(n\)不是\(x\)的倍数,则\(n\)也不会是\(x * 2, x * 3, \cdots\)这些数的倍数,则我们按照上述的规则移动了一些数的位置后,最后\(n\)就无法用来补上最后移动的那个数所空缺下来的位置,所以这种情况下应该输出\(-1\)。

贪心地考虑,当\(n\)是\(x\)的倍数时,我们可以选择形如\(x, x * 2, x * 2 * 3, x * 2 * 5, n\)这些位置,将这些位置上的数向左移动一位,最后把\(n\)补到最后一位。显然,将\(\frac{n}{x}\)分解质因数,可以使乘的倍数的次数最大化,即让字典序较小的数字更多地靠前,且按照质因数从小到大的顺序乘,即让字典序越小的数越靠前。这样得到的排列就是最优的。

对于\(n = 12\)举例,\(x = 4\)的话,所求排列就是这样的:

4 2 3 12 5 6 7 8 9 10 11 1

int n, x;

void solve() {
    cin >> n >> x;
    if (n % x != 0) {
        cout << -1 << '\n';
        return;
    }
    int y = n / x;
    vector<int> bag;
    for (int i = 2; i <= y / i; i ++) {
        if (y % i == 0) {
            while (y % i == 0) {
                bag.push_back(i);
                y /= i;
            }
        }
    }
    if (y > 1) bag.push_back(y);
    vector<int> ans(n + 1, 0);
    for (int i = 1; i <= n; i ++) {
        ans[i] = i;
    }
    ans[1] = x, ans[n] = 1;
    int cur = x;
    for (int i = 0; i < (int)bag.size(); i ++) {
        int t = cur;
        cur *= bag[i];
        ans[t] = cur;
    }
    for (int i = 1; i <= n; i ++) {
        cout << ans[i] << ' ';
    }
    cout << '\n';
}

标签:836,int,题解,位置,Codeforces,cdots,bigoplus,frac,倍数
From: https://www.cnblogs.com/lightmon5210/p/18249277

相关文章

  • Codeforces Round 952 (Div. 4) 题解分享
    A.CreatingWords思路模拟,交换输出即可codeinlinevoidsolve(){stringa,b;cin>>a>>b;swap(a[0],b[0]);cout<<a<<''<<b<<endl; return;}B.MaximumMultipleSum思路暴力枚举数学不会()codein......
  • 【Py/Java/C++三种语言OD独家2024D卷真题】20天拿下华为OD笔试之【贪心/脑筋急转弯】2
    有LeetCode算法/华为OD考试扣扣交流群可加948025485可上全网独家的欧弟OJ系统练习华子OD、大厂真题绿色聊天软件戳od1441了解算法冲刺训练(备注【CSDN】否则不通过)文章目录题目描述与示例题目描述输入描述输出描述示例一输入输出说明示例二输入输出说明示例三......
  • 【Py/Java/C++三种语言OD独家2024D卷真题】20天拿下华为OD笔试之【二分查找】2024D-部
    有LeetCode算法/华为OD考试扣扣交流群可加948025485可上全网独家的欧弟OJ系统练习华子OD、大厂真题绿色聊天软件戳od1441了解算法冲刺训练(备注【CSDN】否则不通过)文章目录题目描述与示例题目描述输入描述输出描述示例输入输出说明解题思路代码pythonjavacpp时......
  • 【Py/Java/C++三种语言OD独家2024D卷真题】20天拿下华为OD笔试之【DFS】2024D-计算三
    有LeetCode算法/华为OD考试扣扣交流群可加948025485可上全网独家的欧弟OJ系统练习华子OD、大厂真题绿色聊天软件戳od1441了解算法冲刺训练(备注【CSDN】否则不通过)文章目录题目描述与示例题目描述:输入描述输出描述示例一输入输出说明示例二输入输出说明示例三......
  • LeetCode:经典题之88 题解与延伸
    系列目录88.合并两个有序数组目录系列目录88.合并两个有序数组C++C语言88.合并两个有序数组......
  • 6.13模拟赛题解
    前面是题解,后面是垃圾话。T1P1541[NOIP2010提高组]乌龟棋没脑子直接设\(f_{p,i,j,k,w}\),为走到\(p\),还剩\(1,2,3,4\)牌各\(i,j,k,w\)张,\(9\cdot10^8\),发现到一个点只要三种牌的数量确定,最后一种也确定了,所以直接设\(f_{p,i,j,k}\)表示三种牌的就行,大力DP即可。T......
  • ABC348E Minimize Sum of Distances 题解
    ABC348EMinimizeSumofDistances题目大意给定一棵共\(n\)个节点的树,第\(i\)个点的权重为\(c_i\)。定义\(f(x)\)表示树上所有点到节点\(x\)的距离乘上权重,即\(f(x)=\sum\limits_{i=1}^n(c_i\timesdis(x,i))\)。求\(\min\limits_{u=1}^nf(u)\)。Solve一眼换根......
  • Codeforces Round 952 (Div. 4)
    A读入两个字符串,交换第一位即可。B题意给定整数\(n\),求一个整数\(x\),满足:\(2\leqx\leqn\)。\(\displaystyle\sum\limits_{i=1}^ki\cdotx\)最大,其中\(k\)为满足\(kx\leqn\)最大的正整数。思路赛时思路可以直接枚举\(x\)的所有情况,暴力计算答案。......
  • AT_abc335_d [ABC335D] Loong and Takahashi 题解
    题目传送门题目大意:高桥在一个地图的中心,有一条龙从地图的左上角开始,每次只能到达与他相邻的四个点,现给出地图的边长,请你给出一种方案,使得地图上的每个点除高桥所在的地方外,都被龙走过且不重复。解题思路:首先,我们拿到这个题目,想十秒,便会发现,我们按照螺旋矩阵的方式行走,......
  • Codeforces Round 952 (Div. 4)
    link赛时过了ABCD,rank15270,我嘞个豆啊,虽然菜成shi了,但是打得很开心,凌晨一点多还兴奋得不得了。就是网络好差,比赛开始好几分钟了还被关在外边。A-CreatingWordsB-MaximumMultipleSum签到题,略C-GoodPrefixes想到用前缀和,一开始写成每次往后一位后缀,只对最后一......