C. [CSP-X 2024 -- T3] 翻硬币
内存限制:256 MiB
时间限制:1000 ms
输入文件:coin.in
输出文件:coin.out
题目类型:传统
评测方式:文本比较
题目描述
枚硬币从左到右依次排成一排,编号依次为 到 。硬币的正面朝上用 表示,背面朝上用 表示,一开始所有的硬币都是正面朝上。
现进行 次操作,每次操作是把一个区间内的所有硬币翻过来:原来正面朝上的变为反面朝上,原来反面朝上的变为正面朝上。
第 次操作的区间 :表示把从第 到第 枚之间的所有硬币都翻过来。
求 次操作后所有硬币从左到右依次组成的 数字序列
输入格式
输入文件
coin.in
第一行整数 和整数 ,表示一共有 枚硬币和 次操作。
以下 行,每行两个正数数 , ,依次表示每次操作区间。
输出格式
输出文件
coin.out
m 次操作结束后 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
差分模板题
代码:
#include<bits/stdc++.h> using namespace std; long long n,q,a[200010]; int main(){ freopen("coin.in","r",stdin); freopen("coin.out","w",stdout); scanf("%lld%lld",&n,&q); while(q--){ long long l,r; scanf("%lld%lld",&l,&r); a[r+1]--; a[l]++; } for(int i=1;i<=n;i++){ a[i]=a[i-1]+a[i]; } for(int i=1;i<=n;i++)a[i]%=2; for(int i=1;i<=n;i++)cout<<a[i]; return 0; }