CF_127E reader Display
这道题其实找到规律之后其实不难,和破损的键盘一样,都有点递推转移的感觉
题意:
你可以进行这样一次操作:选一个点,然后把这个点横切竖切直到正对角线上面的点,全部翻转过来,问你要进行多少次操作才能把所有的点都翻转过来
思路:
多次模拟之后可以发现最右上方的点仅能是选择自己才能翻转,之后与这个相邻的点变成了两个最右上方,而这两个点和刚才那个点一样仅能由自己翻转
还有一个要注意的这个只能影响对角线一侧的
所以只要在对角线一侧一直从最右边上到下遍历翻转就好了
Description
After years of hard work scientists invented an absolutely new e-reader display. The new display has a larger resolution, consumes less energy and its production is cheaper. And besides, one can bend it. The only inconvenience is highly unusual management.
For that very reason the developers decided to leave the e-readers' software to programmers.
The display is represented by n × n square of pixels, each of which can be either black or white. The display rows are numbered with integers from 1 to n upside
down, the columns are numbered with integers from 1 to n from the left to the right. The display can perform commands like "x, y".
When a traditional display fulfills such command, it simply inverts a color of (x, y), where x is the row number and y is
the column number. But in our new display every pixel that belongs to at least one of the segments (x, x) - (x, y)and (y, y) - (x, y) (both
ends of both segments are included) inverts a color.
For example, if initially a display 5 × 5 in size is absolutely white, then the sequence of commands (1, 4), (3, 5), (5, 1), (3, 3)leads
to the following changes:
You are an e-reader software programmer and you should calculate minimal number of commands needed to display the picture. You can regard all display pixels as initially white.
Input
The first line contains number n (1 ≤ n ≤ 2000).
Next n lines contain n characters each: the description of the picture that needs to be shown. "0"
represents the white color and "1" represents the black color.
Output
Print one integer z — the least number of commands needed to display the picture.
Sample Input
5
01110
10010
10001
10011
11110
4<pre name="code" class="cpp">#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<string>
#include<queue>
#include<cstdlib>
#include<algorithm>
#include<stack>
#include<map>
#include<queue>
#include<vector>
using namespace std;
char mp[2048][2048];
int flagr[2048],flagc[2048];
int n,cnt;
void print(){
for(int i=0;i<n;i++)
cout<<mp[i]<<endl;
cout<<"*****************"<<endl;
cout<<endl;
}
void search(){ // print();
for(int i=0;i<n;i++){
for(int j=n-1;j>i;j--){
if((mp[i][j]-'0'+flagr[i]+flagc[j])&1){
mp[i][j]='0';
flagc[j]++,flagr[i]++,cnt++;
}
mp[i][j]='0';
}
} // 0 -> 1, 1 -> 0, '0' = 48;
// (mp[i][i] - '0' + flagr[i] +flagc[i] )%2
for(int i=0;i<n;i++){
mp[i][i]=(mp[i][i] - '0' + flagr[i] +flagc[i] )%2 +48;
}
memset(flagr,0,sizeof flagr);
memset(flagc,0,sizeof flagc);
for(int i=n-1;i>=0;i--){
for(int j=0;j<i;j++){
if((mp[i][j]-'0'+flagr[i]+flagc[j])&1){
// print();
flagc[j]++,flagr[i]++,cnt++;
}
mp[i][j]='0';
}
}
for(int i=0;i<n;i++)
if((mp[i][i] - '0' + flagr[i] +flagc[i] )%2) cnt++;
}
int main(){
//freopen("in.txt","r",stdin);
// freopen("out.txt","w",stdout);
cin>>n;
for(int i = 0;i < n;i++){
scanf("%s",mp[i]);
}
search();
printf("%d\n",cnt);
return 0;
}
CF_127E reader Display的更多相关文章
- 设备管理 USB ID
发现个USB ID站点,对于做设备管理识别的小伙伴特别实用 http://www.linux-usb.org/usb.ids 附录: # # List of USB ID's # # Maintain ...
- Display PDF in browser | Acrobat, Reader XI
点这个链接查看详细的解决办法 http://helpx.adobe.com/acrobat/using/display-pdf-browser-acrobat-xi.html When you cli ...
- TRichTextBox – A universal RichTextBox which can display animated images and more
TRichTextBox – A universal RichTextBox which can display animated images and more trestan, 7 Dec 201 ...
- RFID 读写器 Reader Writer Cloner
RFID读写器的工作原理 RFID的数据采集以读写器为主导,RFID读写器是一种通过无线通信,实现对标签识别和内存数据的读出和写入操作的装置. 读写器又称为阅读器或读头(Reader).查询器(Int ...
- [CareerCup] 8.5 Online Book Reader System 在线读书系统
8.5 Design the data structures for an online book reader system. 这道题OOB的题让我们设计一个在线读书系统,还是没有任何提示,所以发挥 ...
- RFID Reader 线路图收集
This 125 kHz RFID reader http://www.serasidis.gr/circuits/RFID_reader/125kHz_RFID_reader.htm http:// ...
- RFIDler - An open source Software Defined RFID Reader/Writer/Emulator
https://www.kickstarter.com/projects/1708444109/rfidler-a-software-defined-rfid-reader-writer-emul h ...
- Drag & Drop and File Reader
参考 : http://www.html5rocks.com/zh/tutorials/file/dndfiles/ http://blog.csdn.net/rnzuozuo/article/det ...
- Adobe® Reader®.插件开发
Thank you for your interest in developing a plug-in for Adobe® Reader®. To build an Adobe Reader plu ...
随机推荐
- g++ 之 -m64选项
今天编译之前的项目,竟然报了下面的错误 usr/bin/ld: i386 architecture of input file `./proxycpp/soapRemoteDiscoveryBindi ...
- Python异或加密字符串
import os import sys import struct def enc(path, key): path_ret = "" for i in range(0, len ...
- 2019PhpStrom注册码(破解)+汉化(中文)
PhpStrom破解使用 IDEA激活码: https://app.yinxiang.com/fx/bd2158ab-fea3-4382-966f-eaf54f5a4de7 phpStorm使用说明 ...
- Cocos2d-x之String
| 版权声明:本文为博主原创文章,未经博主允许不得转载. 在Cocos2d-x中能够使用的字符串constchar*.std::string和cocos2d::__String等,其中const ...
- Python3学习笔记——异常处理
#!/usr/bin/env python # 1.异常处理 try: # 主要执行的代码 except IndexError as e: # 对于某些错误需要特殊处理的,可以对特殊错误进行捕捉 pr ...
- React-Native基础-安卓篇(二)
前言:这一篇随笔将记录我在React-Native官网文档上学习的基础知识
- jQuery封装轮播图插件
// 布局要求,必须有一个容器,图片和两个按钮,布局方式自定,小圆点样式固定 // <div class="all"> // <img src="img ...
- java 多线程实现的四种方式
一个线程的生命周期 线程是一个动态执行的过程,它也有一个从产生到死亡的过程. 下图显示了一个线程完整的生命周期. 新建状态: 使用 new 关键字和 Thread 类或其子类建立一个线程对象后,该线程 ...
- 后台执行循环(done &)
- 条款16:成对使用 new和delete时要采取相同的形式
std::string* stringPtr1=new std::string; srd::string* stringPtr2=new std::string[100]; 对应地 delete也 ...