Codeforces Round #696 (Div. 2) (A ~ E)超高质量题解(每日训练 Day.16 )

本文提供了Codeforces Round #696 (Div. 2)竞赛中A到E题目的高质量解题思路,包括贪心策略、数论方法、思维技巧和构造算法。涉及问题包括二进制整数处理、正因子条件搜索、数组操作等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

整理的算法模板合集: ACM模板

点我看算法全家桶系列!!!

实际上是一个全新的精炼模板整合计划


Codeforces Round #696 (Div. 2) (A ~ E)超高质量题解

比赛链接:https://codeforces.com/contest/1474

  • A. 贪心
  • B. 数论
  • C. 思维
  • D. 思维
  • E. 构造
  • F. DP + 矩阵快速幂

A. Puzzle From the Future

Problem

对于两个长度为 n n n 的二进制整数 a a a b b b ,通过以下方式构造出整数 d d d

a a a b b b 按位相加但不进行进位运算,得到一个整数 c c c,因此 c c c 中可能有 2 2 2 。例如将 0110 0110 0110 1101 1101 1101 按位相加的结果是 1211 1211 1211

c c c 中相同且连续的数字替换为一位,得到 d d d。例如将 022000 022000 022000 变成 020 020 020(因此, d d d 没有相同且连续的数字)。

现在,给你 b b b,求一个 a a a 使得 d d d 最大。

1 ≤ t ≤ 1000 , 1 ≤ n ≤ 1 0 5 1 \leq t \leq 1000,1 \leq n \leq 10^5 1t1000,1n105

Solution

非常简单的按位贪心

数尽量地大,就是最高位直接置为 1 1 1 ,然后后面也是尽可能地越大越好,并且因为如果有连续的 1 1 1 或者连续的 0 0 0 就会消掉,会更亏,所以要避免这种情况,我们就标记一下上一个是 0 0 0 还是 1 1 1 还是 2 2 2 ,下一个就要避免掉这种情况,简单在纸上写一下四种情况,然后模拟一下即可。

// Problem: A. Puzzle From the Future
// Contest: Codeforces - Codeforces Round #696 (Div. 2)
// URL: https://codeforces.com/contest/1474/problem/A
// Memory Limit: 256 MB
// Time Limit: 1000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#include <bits/stdc++.h> 
using namespace std;

const int N = 50007;

int n, m, t;
string a, b;

int main()
{
   
   
    scanf("%d", &t);
    while(t -- ) {
   
   
        scanf("%d", &n);
        cin >> b;
        string a = "";
        a += '1';
        int last = 1 + b[0] - '0';
        for(int i = 1; i < b.length(); ++ i) {
   
   
            if(last == 2) {
   
   
                if(b[i] == '1')
                    a += '0';
                else a += '1';
            }
            else if(last == 1) {
   
   
                if(b[i] == '1')
                    a += '1';
                else a += '0';
            }
            else a += '1';
            last = a[i] - '0' + b[i] - '0';
        }
        cout << a << endl;
    }
    return 0;
}

B. Different Divisors

Problem

给定正整数 d ( d ≤ 1 0 4 ) d(d\le 10^{4}) d(d104),请求出最小的满足如下条件的正整数 a a a

  • a a a 至少有四个正因子( 1 1 1 和它本身计算在内)
  • 对于 a a a 的任两个正因子 x , y ( x < y ) x,y(x<y)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

繁凡さん

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值