首页 > 其他分享 >Chips on a Board

Chips on a Board

时间:2023-02-09 17:47:47浏览次数:35  
标签:ch int 异或 Board Chips getchar

Chips on a Board

题目就是让我们求\((x - l)\)的异或和,对于减\(l\),我们不好处理,考虑在减\(l\)的限制下拆位,那么我们发现对于在\([l + 2^j, l + 2 ^ {j+1} - 1]\)的数最高位在减\(l\)后都为\(1\)且为第\(j\)位。
这启示我们对于每一个\(l\)维护\([l,l+2^j-1]\)数在减\(l\)下的异或和,显然

\[f_{l,j} = f_{l, j-1} \oplus f_{l+2^{j-1}, j-1}\oplus[S_{l + 2^j - 1} - S_{l+2^{j-1}-1}为奇数]*2^{j-1} \]

其中\(S_i\)表示\([1,i]\)中有多少个数。

在处理一组询问\(l,r\)时,从最高位开始考虑,如果这一位\(k\)可能有数,那么将\([l,l+2^k-1]\)的异或值用\(f\)算出,对于第\(k\)位,那么只跟\([l+2^k,r]\)中数个数的奇偶性有关,接着只需考虑\([l+2^k,r]\)中数以后位的异或值,时间复杂度\(O(\log m)\)。

Code
#include<cstdio>
#include<iostream>
#define IN inline
using namespace std;
const int N = 2e5 + 5;
int n, m, s[N], f[N][22], Q; char ch[N];

IN int read() {
	int t = 0,res = 0; char ch = getchar();
	for (; !isdigit(ch); ch = getchar()) t |= (ch == '-');
	for (; isdigit(ch); ch = getchar()) res = (res << 3) + (res << 1) + (ch ^ 48);
	return t ? -res : res;
}
int main() {
	n = read(), m = read();
	for (int i = 1, q; i <= n; i++) q = read(), s[q]++;
	for (int i = 1; i <= m; i++) s[i] += s[i - 1];
	for (int j = 1; j <= 20; j++)
		for (int i = 1; i <= m - (1 << j) + 1; i++)
			f[i][j] = f[i][j - 1] ^ f[i + (1 << j - 1)][j - 1] ^ 
			((s[i + (1 << j) - 1] - s[i + (1 << j - 1) - 1]) & 1 ? (1 << j - 1) : 0);
	Q = read();
	for (int i = 0; i < Q; i++) {
		int l = read(), r = read(), ans = 0;
		for (int j = 20; j >= 0; j--)
			if (l + (1 << j) <= r + 1) {
				ans ^= f[l][j] ^ ((s[r] - s[l + (1 << j) - 1]) & 1 ? (1 << j) : 0);
				l += (1 << j);
			}
		if (ans == 0) ch[i] = 'B'; else ch[i] = 'A';
	}
	printf("%s\n", ch);
}

标签:ch,int,异或,Board,Chips,getchar
From: https://www.cnblogs.com/nibabadeboke/p/17106430.html

相关文章

  • CF1511G Chips on a Board
    CF1511GChipsonaBoard比较有启发性的一道题。询问是最简单的nim游戏,不难发现若一列上有两个棋子,那么这两个棋子对于答案是没有贡献的,因此可以令\(c_i\)表示第\(......
  • k8s可视化界面-kuboard v3安装
    1、Kuboard-Kubernetes多集群管理界面Kuboard是k8s的一个多集群管理页面。官网地址:https://kuboard.cn/2、安装安装Kuboard之前,假设:您已经准备好......
  • React dashboard UI components library All In One
    ReactdashboardUIcomponentslibraryAllInOne仪表板UI组件库TremorTheReactlibrarytobuilddashboardsfast#beta⚠️$npminstall@tremor/react......
  • 超级好用的KeyBoard WPF软键盘
    超级好用的KeyBoardWPF软键盘​​项目背景​​​​系统结构​​​​核心概述​​​​1、用于墨迹识别核心类库​​​​2、中文字库​​​​效果展示​​​​1、拼音检索效......
  • Qt-Qt之剪切板、热键应用(QClipboard、RegisterHotKey)
     .pro1QT+=coregui23greaterThan(QT_MAJOR_VERSION,4):QT+=widgets45CONFIG+=c++1167#Thefollowingdefinemakesyourcompi......
  • 8、TensorBoard的使用(二)--------add_image()常用来观察训练结果
    1、add_image()参数:add_image(self,tag,img_tensor,global_step=None,walltime=None,dataformats='CHW‘)tag:(string)Dataidentifier数据标签;img_tensor:(必须是t......
  • kubernetes-dashboard 实现 http 访问以及免 token 登录
    目录下载官方yaml文件修改yaml文件修改service端口修改clusterrolebinding修改deployment内容修改探针检测修改镜像拉取策略修改容器端口关闭token登录增加ing......
  • keyboard_shortcuts
    内核以下是系统底层的快捷键,通常被用于调试。遇到系统问题,请尽可能尝试这些快捷键,而不是按住电源开关强制关机。这些快捷键需要首先使用如下命令激活echo"1">/proc/s......
  • Ubuntu编译rocket-chips & rocket-tools 步骤记录
    Ubuntu1404&1808编译rocket-chips和rocket-tools步骤记录已在ubuntu1404-x64、ubuntu1804-x64系统上测试通过。虚拟机使用vmware15版本。本教程编写日期2019年8月28日,大体......
  • Grafana Dashboard
    GrafanaDashboardjvmmicrometer(4701)jmx_export(8563)https://grafana.com/grafana/dashboards/8563-jvm-dashboard/......