设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. 魔法波(乔明达)相关推荐

  1. 2017清华本科生特等奖得主出炉,AI学霸乔明达获奖

    说到学霸,今天偶然瞥见一条新闻,"清华"."本科生"."特等奖"--这是什么东东?虽然抱着内心会受到一万点伤害的危险,营长还是果断地点开了链 ...

  2. 2013百度之星月度冠军乔明达:小学五年级接触编程

    百度爱好者(Baiduer.com.cn)消息 2013百度之星东部赛区区域赛的冠军出人意料的又是一位高中生,不同的是这位冠军更加年轻,他就是来自南京外国语学校高二年级的乔明达同学.由于乔明达课业繁忙 ...

  3. 【tsinsen A1490】osu!(乔明达) 矩阵+线段树

    试题来源 2013中国国家集训队第二次作业 问题描述 osu!是一个基于<押忍!战斗!应援团><精英节拍特工><太鼓达人>等各种音乐游戏做成的一款独特的PC版音乐游 ...

  4. [TsinsenA1490] osu!(乔明达)

    作为一名osu!玩家,这道题成功吸引到了我... 题意 长度为n的序列,给出每一个数字可能为1的概率aia_i,每个数字为0的概率为1−ai1-a_i.两个操作:修改某个数字的概率,询问一段区间得分期 ...

  5. A1490. osu!(乔明达)|概率与期望|卡常|矩阵

    60TLE 把要求信息拆分 用 线段树和矩阵维护 upd:fqk太劲了 加个读入优化就A过去了 #include <cstdio> #include <iostream> #i ...

  6. A1489. 抽奖(乔明达)

    题解已经讲的很清楚了,就不鬼扯了,直接上代码 1 #include<bits/stdc++.h> 2 #define maxn 100005 3 double a[maxn],p[maxn ...

  7. A1490. osu!(乔明达)

    只能过前60%,还在罗 1 #include<bits/stdc++.h> 2 using namespace std; 3 4 #define maxn 550000 5 #define ...

  8. 学习机器学习开始的一些别人的看法

    首页 博客 学院 下载 GitChat TinyMind 商城 VIP 写博客 发Chat AI科技大本营 人工智能技术和产业社区 RSS订阅 个人资料 AI科技大本营 关注 原创 444 粉丝 13 ...

  9. [颓废史]蒟蒻的刷题记录

    QAQ蒟蒻一枚,其实我就是来提供水题库的. 以下记录从2016年开始. 1.1 1227: [SDOI2009]虔诚的墓主人 树状数组+离散化 3132: 上帝造题的七分钟 树状数组 二维区间加减+查 ...

最新文章

  1. RabbitMQ指南(上)
  2. Rhythmk 学习 Hibernate 08 - Hibernate annotation 关联关系注解
  3. 轻量服务器怎么进信息库,轻量服务器怎么上传数据库
  4. 通过VScode进行git的版本管理
  5. 【校招VIP】测试脚本语言之系统状态(内存、网络)
  6. 腾讯视频qlv格式转MP4格式
  7. Vue+Element-ui实现考试检查答题(判断正确答题,错答,漏答)
  8. ADO访问Excel 2007
  9. 软件可靠性计划过程组成与LRU简介
  10. PCIe传输速率和有效带宽计算方式
  11. 修复windows修复引导_如何使用安全模式修复Windows PC(以及何时应该修复)
  12. Work Tasks
  13. 有关推挽输出、开漏输出、复用开漏输出、复用推挽输出
  14. 救救家长:疫情封控下packetbeat+kafka+ES套件监控青少年上网行为
  15. TCP的分片和IP分片的区别
  16. 关于食品安全,你应该知道的60件事
  17. spss 构建决策树 树形图 正在处理不显示问题
  18. Nature综述:肠道菌群与结直肠癌的研究进展
  19. Error: Can‘t find Python executable “python“, you can set the PYTHON env variable
  20. 关于网络广告及其收费标准

热门文章

  1. python的IO,以及codecs模块
  2. 哈尔滨工业大学计算机系统大作业
  3. 麦当劳宣布20年来最大规模收购 提高服务智能化
  4. 根据教程编写及完成图书管理系统项目分享
  5. 使用docker搭建gitlab版本控制系统
  6. 【web项目】前端生日礼物--注册页面篇
  7. tvOS多层图片的使用
  8. Echarts_1:水平柱体
  9. 文件共享总结上篇-Windows之间文件共享
  10. mysql 连接间歇性失联解决办法