A1488. 魔法波(乔明达)
设si表示表示每个格子的状态(1表示腐地,0表示土地),xi表示对每个格子的操作状态(1表示发射,0表示不发射),可以列出异或方程si^sigma(xj)=1
然而介四O(n^6),BOOM
于是我们把格子分成横向(Yl)和纵向(Yr)的块,每一个块代表能对其中的格子产生影响的格子的集合,所以我们有,,,这里请把sigma理解为异或和
Y=sigma(xi) ①
si^sigma(Ylj)^sigma(Yrj)^xi=1 ②
把②移项得xi=si^sigma(Ylj)^sigma(Yrj)^1 ③
把③带入①得sigma(Ylj)^sigma(Yrj)=Yi^sigma(sj)^sigma(1) ④
然而只能A50%,内心崩溃
1 #include<bits/stdc++.h> 2 using namespace std; 3 #define maxn 805 4 bitset<2005>B[2005]; 5 char Map[maxn][maxn]; 6 int num,Yl[maxn][maxn],Yr[maxn][maxn],ans[2005]; 7 void gauss() { 8 int i, j, k; 9 for(i=0,k=0; i<num; i++) { 10 for(j=k; j<num; j++) { 11 if(B[j][i]==1) { 12 if(j!=k) swap(B[j],B[k]); 13 break; 14 } 15 } 16 if(j==num) continue; 17 for(j=k+1; j<num; j++) { 18 if(B[j][i]==1) { 19 B[j] ^= B[k]; 20 } 21 } 22 k ++; 23 } 24 for(i=0; i<num; i++) ans[i] = -1; 25 for(i=num-1; i>=0; i--) { 26 int res = B[i][num]; 27 for(j=num-1; j>=i; j--) { 28 if(B[i][j]) { 29 if(ans[j]<0) ans[j] = res; 30 res ^= ans[j]; 31 } 32 } 33 } 34 } 35 int main(){ 36 int n; 37 scanf("%d",&n); 38 for(int i=1;i<=n;i++) 39 scanf("%s",Map[i]+1); 40 for(int j=1;j<=n;j++){ 41 Map[0][j]='X'; 42 for(int i=1;i<=n;i++){ 43 if(Map[i][j]=='X')continue; 44 if(Map[i-1][j]=='X')Yr[i][j]=num++; 45 else Yr[i][j]=Yr[i-1][j]; 46 } 47 } 48 for(int i=1;i<=n;i++){ 49 Map[i][0]='X'; 50 for(int j=1;j<=n;j++){ 51 if(Map[i][j]=='X')continue; 52 if(Map[i][j-1]=='X')Yl[i][j]=num++; 53 else Yl[i][j]=Yl[i][j-1]; 54 } 55 } 56 57 for(int i=0;i<num;i++)B[i].set(i); 58 for(int i=1;i<=n;i++) 59 for(int j=1;j<=n;j++){ 60 if(Map[i][j]=='X')continue; 61 int l=Yl[i][j],r=Yr[i][j],x=Map[i][j]-'0'; 62 B[l].flip(l),B[l].flip(r); 63 B[r].flip(l),B[r].flip(r); 64 if(x^1)B[l].flip(num),B[r].flip(num); 65 } 66 for(int i=0;i<num;i++){ 67 for(int j=0;j<=num;j++) 68 printf("%d",B[i][j]?1:0); 69 printf("\n"); 70 } 71 printf("\n"); 72 gauss(); 73 for(int i=0;i<num;i++){ 74 for(int j=0;j<=num;j++) 75 printf("%d",B[i][j]?1:0); 76 printf("\n"); 77 } 78 for(int i=1;i<=n;i++){ 79 for(int j=1;j<=n;j++){ 80 if(Map[i][j]=='X')printf("0"); 81 else printf("%d",(Map[i][j]-'0')^ans[Yl[i][j]]^ans[Yr[i][j]]^1); 82 } 83 printf("\n"); 84 } 85 return 0; 86 }
View Code
转载于:https://www.cnblogs.com/Ngshily/p/5038192.html
A1488. 魔法波(乔明达)相关推荐
- 2017清华本科生特等奖得主出炉,AI学霸乔明达获奖
说到学霸,今天偶然瞥见一条新闻,"清华"."本科生"."特等奖"--这是什么东东?虽然抱着内心会受到一万点伤害的危险,营长还是果断地点开了链 ...
- 2013百度之星月度冠军乔明达:小学五年级接触编程
百度爱好者(Baiduer.com.cn)消息 2013百度之星东部赛区区域赛的冠军出人意料的又是一位高中生,不同的是这位冠军更加年轻,他就是来自南京外国语学校高二年级的乔明达同学.由于乔明达课业繁忙 ...
- 【tsinsen A1490】osu!(乔明达) 矩阵+线段树
试题来源 2013中国国家集训队第二次作业 问题描述 osu!是一个基于<押忍!战斗!应援团><精英节拍特工><太鼓达人>等各种音乐游戏做成的一款独特的PC版音乐游 ...
- [TsinsenA1490] osu!(乔明达)
作为一名osu!玩家,这道题成功吸引到了我... 题意 长度为n的序列,给出每一个数字可能为1的概率aia_i,每个数字为0的概率为1−ai1-a_i.两个操作:修改某个数字的概率,询问一段区间得分期 ...
- A1490. osu!(乔明达)|概率与期望|卡常|矩阵
60TLE 把要求信息拆分 用 线段树和矩阵维护 upd:fqk太劲了 加个读入优化就A过去了 #include <cstdio> #include <iostream> #i ...
- A1489. 抽奖(乔明达)
题解已经讲的很清楚了,就不鬼扯了,直接上代码 1 #include<bits/stdc++.h> 2 #define maxn 100005 3 double a[maxn],p[maxn ...
- A1490. osu!(乔明达)
只能过前60%,还在罗 1 #include<bits/stdc++.h> 2 using namespace std; 3 4 #define maxn 550000 5 #define ...
- 学习机器学习开始的一些别人的看法
首页 博客 学院 下载 GitChat TinyMind 商城 VIP 写博客 发Chat AI科技大本营 人工智能技术和产业社区 RSS订阅 个人资料 AI科技大本营 关注 原创 444 粉丝 13 ...
- [颓废史]蒟蒻的刷题记录
QAQ蒟蒻一枚,其实我就是来提供水题库的. 以下记录从2016年开始. 1.1 1227: [SDOI2009]虔诚的墓主人 树状数组+离散化 3132: 上帝造题的七分钟 树状数组 二维区间加减+查 ...
最新文章
- RabbitMQ指南(上)
- Rhythmk 学习 Hibernate 08 - Hibernate annotation 关联关系注解
- 轻量服务器怎么进信息库,轻量服务器怎么上传数据库
- 通过VScode进行git的版本管理
- 【校招VIP】测试脚本语言之系统状态(内存、网络)
- 腾讯视频qlv格式转MP4格式
- Vue+Element-ui实现考试检查答题(判断正确答题,错答,漏答)
- ADO访问Excel 2007
- 软件可靠性计划过程组成与LRU简介
- PCIe传输速率和有效带宽计算方式
- 修复windows修复引导_如何使用安全模式修复Windows PC(以及何时应该修复)
- Work Tasks
- 有关推挽输出、开漏输出、复用开漏输出、复用推挽输出
- 救救家长:疫情封控下packetbeat+kafka+ES套件监控青少年上网行为
- TCP的分片和IP分片的区别
- 关于食品安全,你应该知道的60件事
- spss 构建决策树 树形图 正在处理不显示问题
- Nature综述:肠道菌群与结直肠癌的研究进展
- Error: Can‘t find Python executable “python“, you can set the PYTHON env variable
- 关于网络广告及其收费标准