当前位置: 首页 > news >正文

CF大陆斗C战士(三)

文章目录

        • [C. Good Subarrays](https://codeforces.com/problemset/problem/1398/C)
          • 题目大意
          • 题目分析
          • code
        • [C. Boboniu and Bit Operations](https://codeforces.com/problemset/problem/1395/C)
          • 题目大意
          • 题目分析
          • code
        • [C. Rings](https://codeforces.com/problemset/problem/1562/C)
          • 题目大意
          • 题目分析
          • code

C. Good Subarrays

题目大意

如果一个子数组的数组元素之和等于数组元素个数,则称其为好子数组。给你一个数组,问其中的好子数组有多少个。

题目分析

一个子数组的数组元素之和等于数组元素个数为好子数组,那么如果将每一位减一,则元素和为零时为好子数组

假设当前前缀和为sum,若使子数组和为0则需要减去和同样为sum的前,即sum之前出现了多少次,既可以得到几个好子数组。注意当前缀和本身为0时,本身就作为一种方案。

code
#include<bits/stdc++.h>
#define int long long

using namespace std;

int n, m, k, t;

void solve()
{
    map<int, int>q;
    string s;
    cin >> n >> s;

    int ans = 0, sum = 0;
    for(int i = 0; i < n; i ++)
    {
        sum += s[i] - '0' - 1;
        if(!sum) ans ++;

        ans += q[sum];
        q[sum] ++;
    }

    cout << ans << "\n";
}

signed main()
{
    cin >> t;
    while(t --) solve();
    return 0;
}

C. Boboniu and Bit Operations

题目大意

给你两个数组a和b,规定c[i]=a[i]&b[j],找到c1 | c2…|cn的最小值

题目分析

几个数之间进行&操作,数值只会不变或者变小。几个数之间进行|操作,数值只会不变或者变大。

设c1 | c2…|ci结果为res,若要使最终结果则在多异或数的情况下要保证res不变,我们只需找到置否有相应的a[i]与b[j]配队满足即可。

对于res的范围最小值为0而最大值应为a中元素相或之和。从小到大枚举res即可

code
#include<bits/stdc++.h>
#define int long long

using namespace std;

const int N = 210;

int n, m, k, t;
int a[N], b[N];

bool check(int x)
{
    int cnt = 0;
    for(int i = 1; i <= n; i ++)
        for(int j = 1;j <= m; j ++)
        {
            if(((a[i] & b[j]) | x) == x)
            {
                cnt ++;
                break;
            }
        }

    if(cnt == n) return true;
    else return false;
}

void solve()
{
    int maxn = 0;

    cin >> n >> m;
    for(int i = 1; i <= n; i ++)
    {
        cin >> a[i];
        maxn |= a[i];
    }
    for(int i = 1; i <= m; i ++) cin >> b[i];

    for(int i = 0; i <= maxn; i ++)
    {
        if(check(i))
        {
            cout << i << "\n";
            break;
        }
    }
}

signed main()
{
    solve();
    return 0;
}

C. Rings

题目大意

有一个01串,需要你选出两个区间 [l1, r1] 和 [l2, r2]满足以下条件:

  • 1≤l1≤n ,1≤r1≤n, r1−l1+1≥n/2
  • 1≤l2≤n, 1≤r2≤n, r2−l2+1≥n/2
  • 至少满足 l1 != l2,r1!= r2两条件当中的一个
  • 第一个区间所转化成的十进制值的值应当是第二个的k倍
题目分析

全为1的情况只需要找出长度相等且满足要求的两段即可,得到的数值是一样的

成倍数关系在二进制中比较容纳工艺想到和办到应该是左移,如111001110的二倍,当零在第一位时000110011数值应当是相等的

code
#include<bits/stdc++.h>

using namespace std;

int n, m, k, t;

void solve()
{
    string s;
    cin >> n >> s;
    s = " " + s;

    for(int i = 1; i <= n / 2; i ++)
    {
        if(s[i] == '0')
        {
            cout << i << " " << n << " " << i + 1 << " " << n << "\n";
            return;
        }
    }

    for(int i = n / 2 + 1; i <= n; i ++)
    {
        if(s[i] == '0')
        {
            cout << 1 << " " << i << " " << 1 << " " << i - 1 << "\n";
            return;
        }
    }

    cout << 1 << " " << n - 1 << " " << 2 << " " << n << "\n";
}

int main()
{
    cin >> t;
    while(t --) solve();
    return 0;
}

相关文章:

  • Vue3之父子组件通过事件通信
  • linux目录/usr/lib/systemd/system目录详解
  • ElasticSearch - 分片内部原理之动态更新索引、近实时搜索、持久化变更、段合并
  • 蓝桥杯刷题冲刺 | 倒计时26天
  • 2023年3月计算机二级公共基础考前预测
  • Verilog实现组合逻辑电路
  • Qt——通过一个简单的程序例程熟悉使用Qt Creator软件进行项目搭建的基本流程(新建项目、项目的文件组成、修改ui文件、编译运行与调试)
  • 一文带你吃透操作系统
  • 07从零开始学Java之如何正确的编写Java代码?
  • 如何保证Redis缓存和数据库一致性?
  • 2023年网络安全比赛--attack(新)数据包分析中职组(超详细)
  • 【Android -- 软技能】聊聊程序员的软技能
  • STM32F1硬件SPI驱动nRF24L01通过按键控制数据收发带状态反馈
  • 2022济南大学acm新生赛题解
  • ES+Redis+MySQL,这个高可用架构设计太顶了!
  • [rust! #004] [译] Rust 的内置 Traits, 使用场景, 方式, 和原因
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • Docker下部署自己的LNMP工作环境
  • KMP算法及优化
  • MySQL主从复制读写分离及奇怪的问题
  • Redis在Web项目中的应用与实践
  • spring + angular 实现导出excel
  • spring cloud gateway 源码解析(4)跨域问题处理
  • windows下如何用phpstorm同步测试服务器
  • 从PHP迁移至Golang - 基础篇
  • 复杂数据处理
  • 码农张的Bug人生 - 见面之礼
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 世界上最简单的无等待算法(getAndIncrement)
  • -- 数据结构 顺序表 --Java
  • 微服务核心架构梳理
  • 一天一个设计模式之JS实现——适配器模式
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • 做一名精致的JavaScripter 01:JavaScript简介
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • ### RabbitMQ五种工作模式:
  • #QT(一种朴素的计算器实现方法)
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (Java数据结构)ArrayList
  • (php伪随机数生成)[GWCTF 2019]枯燥的抽奖
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (每日持续更新)jdk api之StringBufferInputStream基础、应用、实战
  • (每日一问)操作系统:常见的 Linux 指令详解
  • (每日一问)计算机网络:浏览器输入一个地址到跳出网页这个过程中发生了哪些事情?(废话少说版)
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (实战)静默dbca安装创建数据库 --参数说明+举例
  • (转)负载均衡,回话保持,cookie
  • (转)原始图像数据和PDF中的图像数据
  • .net core 6 redis操作类
  • .NET_WebForm_layui控件使用及与webform联合使用
  • .NET开发者必备的11款免费工具
  • .net通过类组装数据转换为json并且传递给对方接口