C. [CSP-X 2024 -- T3] 翻硬币
内存限制:256 MiB时间限制:1000 ms输入文件:coin.in输出文件:coin.out
题目类型:传统评测方式:文本比较
题目描述
枚硬币从左到右依次排成一排,编号依次为 1 到 n。硬币的正面朝上用 0 表示,背面朝上用 1 表示,一开始所有的硬币都是正面朝上。
现进行 m 次操作,每次操作是把一个区间内的所有硬币翻过来:原来正面朝上的变为反面朝上,原来反面朝上的变为正面朝上。
第 次操作的区间 [l[i],r[i]] :表示把从第 l 到第 r 枚之间的所有硬币都翻过来。
求 次操作后所有硬币从左到右依次组成的 数字序列
输入格式
输入文件
coin.in第一行整数 n 和整数 m,表示一共有 n 枚硬币和 m 次操作。
以下 行,每行两个正数数 l[ i ] , r[ i ] ,依次表示每次操作区间。
输出格式
输出文件
coin.outm 次操作结束后 n 枚硬币从左到右依次组成的 01 数字序列。
样例
输入样例 #1
5 3 2 4 1 3 3 5输出样例 #1
10101输入样例 #2
10 5 1 6 8 10 3 7 4 6 2 5输出样例 #2
1010011111数据范围与提示
60% 的数据 1 ≤ n, m ≤ 1000;
100% 的数据 1 ≤ n, m ≤ 200000
差分模板题
一个一维数组,将每两个数的差做差分数组。
如果将l~r的数组同时加上x,就将a[l]+x,a[r+1]-x。
操作后求前缀和就是结果。
cpp#include<bits/stdc++.h> using namespace std; int b[200005]; int main(){ freopen("coin.in","r",stdin); freopen("coin.out","w",stdout); int n,m,l,a[200005],r; cin>>n>>m; for(int i=1;i<=n;i++){ a[i]=0; } while(m--){ cin>>l>>r; b[l]++; b[r+1]--; } for(int i=1;i<=n;i++){ b[i]+=b[i-1]; } for(int i=1;i<=n;i++){ cout<<b[i]%2; } return 0; }
CSP-X2024解题报告(T3)
wang_changyue2024-11-22 6:07
相关推荐
平凡但不平庸的码农3 小时前
Go Slice 详解炸膛坦客6 小时前
嵌入式 - 数据结构与算法:(1-7)数据结构 - 顺序表和链表的对比Jasmine_llq7 小时前
《B3867 [GESP202309 三级] 小杨的储蓄》啦啦啦_99997 小时前
案例之 逻辑回归_电信用户流失预测风筝在晴天搁浅7 小时前
快手/字节 CodeTop LeetCode 415.字符串相加hoiii1878 小时前
基于栅格法的机器人工作空间划分系统DragonnAi8 小时前
猫咪如厕检测与分类识别系统系列【十四】 项目结构重新整理-即将开源完整算法机器视觉_Explorer8 小时前
【halcon】编程技巧:鼠标擦除灵智实验室9 小时前
PX4状态估计技术EKF2详解(二):EKF2 误差状态动力学与协方差传播米粒19 小时前
力扣算法刷题 Day 64 Floyd算法 & A* 算法 & 总结篇