P9017 [USACO23JAN] Lights Off G 题解

一次操作相当于把 \(a\) 异或上 \(b\),修改开关的一位相当于将这一位异或上 \(1\)

会发现一个很神奇的性质:初始开关对灯的影响和改变开关状态对灯的影响是独立的。而前者的影响是固定的,所以我们可以只考虑改变开关状态对灯的影响。假设一共需要 \(k\) 次操作能使所有灯关闭,如果我们在第 \(i\) 次操作的时候改变了开关 \(p\) 的状态,那么第 \(i+1\) 次的时候这个开关会影响到 \(p+1\)(因为要循环右移一位),第 \(i+2\) 次操作会影响到 \(p+2\)。所以如果在第 \(i\) 次操作改变一个开关的状态,那么相当于将长度为 \(m-i+1\) 的一段区间全部影响了(异或上 \(1\))。那么如果我们一共需要 \(k\) 次操作,那么我们可以分别修改长度为 \(1\)\(k\) 的区间各一次。注意这里的区间指的不一定是连续的,也有可能是一段前缀加一段后缀(因为可能循环右移)。并且如果一个点被修改(异或)两次的话相当于不修改。

\(dp_{i,j}\) 表示 \(i\) 次操作(第 \(i\) 次操作指的是将一段长度为 \(i\) 的区间异或上 \(1\))之后能否达到 \(j\) 状态。那么转移方程为 \(dp_{i,j}=dp_{i,j} | dp_{i-1,j ^ k}\),其中 \(k\) 是长度为 \(i\) 的区间。时间复杂度 \(O(2^n\times n^2)\),可以通过。

还可以优化。如果一个状态是另一个状态通过循环右移得到的,那么这两个状态的 \(dp\) 值一定相同,可以只用记录一次。时间复杂度 \(O(2^n \times n)\)

#include<bits/stdc++.h>
using namespace std;
const int N = 2e6 + 10;
int f[45][N],t,n,p[N];
char a[N],b[N];
int g(int x){return (x >> 1) + ((x & 1) << n - 1);}
signed main()
{
	cin >> t >> n;
	memset(p,-1,sizeof p);
	for(int i = 0;i < (1 << n);i++)
	{
		int x = i;
		while(p[x] == -1) p[x] = i,x = g(x); 
	}
	f[0][0] = 1;
	for(int i = 1,s = 0;i <= 2 * n;i++)
	{
		s ^= (1 << ((i - 1) % n));
		for(int j = 0;j < (1 << n);j++)
			f[i][p[j]] |= f[i - 1][p[j ^ s]];
	}
	while(t--)
	{
		cin >> a >> b;
		int A = 0,B = 0;
		for(int i = 0;i < n;i++)
			A |= ((a[i] - '0') << (n - i - 1)),
			B |= ((b[i] - '0') << (n - i - 1));
		if(A == 0){puts("0");continue;}
		for(int i = 1;;i++)
		{
			A ^= B,B = g(B);
			if(f[i][p[A]]){cout << i << endl;break;}
		}
	}
	return 0;
}

本文作者:Creeper_l

本文链接:https://www.cnblogs.com/Creeperl/p/17969053

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Creeper_l  阅读(13)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
  1. 1 イエスタデイ(翻自 Official髭男dism) 茶泡饭,春茶,kobasolo
  2. 2 世间美好与你环环相扣 柏松
  3. 3 True love tired
  4. 4 一笑江湖 (DJ弹鼓版) 闻人听書_
  5. 5 最好的安排 曲婉婷
  6. 6 星星在唱歌 司南
  7. 7 山川 李荣浩
  8. 8 On My Way Alan Walker
  9. 9 百战成诗 王者荣耀·100英雄官方群像献礼歌
  10. 10 雪 Distance Capper / 罗言
  11. 11 Edamame bbno$ / Rich Brian
  12. 12 半生雪 七叔-叶泽浩
  13. 13 Catch My Breath Kelly Clarkson
  14. 14 Love Is Gone SLANDER / Dylan Matthew
  15. 15 Endless Summer Alan Walker / Zak Abel
  16. 16 悬溺 葛东琪
  17. 17 风吹丹顶鹤 葛东琪
  18. 18 Normal No More TYSM
  19. 19 哪里都是你 队长
  20. 20 Stronger Kelly Clarkson
  21. 21 廖俊涛
  22. 22 消愁 毛不易
  23. 23 The Runner Yubik
  24. 24 踏山河 七叔-叶泽浩
  25. 25 Waiting For Love Avicii
  26. 26 在你的身边 盛哲
  27. 27 Dream It Possible Delacey
  28. 28 凄美地 郭顶
  29. 29 满天星辰不及你 ycc
  30. 30 侧脸 于果
  31. 31 阿拉斯加海湾 蓝心羽
  32. 32 虞兮叹 闻人听書_
  33. 33 离别开出花 就是南方凯
  34. 34 盗墓笔记·十年人间 李常超 (Lao乾妈)
最好的安排 - 曲婉婷
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起