UVa509 - RAID!
来源:互联网 发布:万网查询域名备案号 编辑:程序博客网 时间:2024/06/12 00:55
#include<bits/stdc++.h>using namespace std;int d, s, b, kase=0;char type;char tab[8][8000];bool Fix(){ for(int i=0;i<s*b;++i){ int sum=0,cnt=0,x_no; for(int j=0;j<d;++j){ if(tab[j][i]=='1') ++sum; if(tab[j][i]=='x') ++cnt,x_no=j; } sum%=2; if(cnt>=2) return false; else if(cnt == 1){ if(sum) if(type=='E') tab[x_no][i]='1'; else tab[x_no][i]='0'; else if(type=='E') tab[x_no][i]='0'; else tab[x_no][i]='1'; } else if(cnt == 0){ if(type == 'E'&& sum == 1) return false; if(type == 'O' && sum == 0) return false; } } return true;}void out_data(){ int sum=0,bit_cnt=0; for(int i=0;i<b;++i){ int except =i%d; for(int j=0;j<d;j++){ if(j==except) continue; for(int k=i*s;k<i*s+s;++k){ bit_cnt=(bit_cnt+1)%4; if(tab[j][k]=='0') sum*=2; else sum=sum*2+1; if(!bit_cnt){ printf("%X",sum); sum=0; } } } } if(bit_cnt){ int over =4-bit_cnt; sum=sum*(1<<over); printf("%X",sum); } printf("\n");}int main(){ ios::sync_with_stdio(false); while(memset(tab,0,sizeof(tab)),cin>>d&&d){ cin>>s>>b>>type; for(int i=0;i<d;++i) cin>>tab[i]; if(!Fix()) printf("Disk set %d is invalid.\n",++kase); else{ printf("Disk set %d is valid, contents are: ",++kase); out_data(); } } return 0;}
今天看到一位学长写的博客,很受启发。要抛却功利心,形成自己的思维,不要老看题解,要追求多种方法,要优化自己的程序直到不能再优化,关注自己程序的运行时间和内存占用的排名。还有写题解不能只写两三句话就完事,要不然还不如不写。
这道RAID的题目,首先是位运算,实际上我的思路是看样例猜出来的,奇校验所有数字加起来为奇数,偶校验所有数字加起来为偶数,后来查阅资料:偶校验中当实际数据中“1”的个数为偶数的时候,这个校验位就是“0”,否则这个校验位就是“1”,奇校验正好相反,可知自己的猜想是正确的。
然后还有一点是输出数据的时候,4个bit转化为一个十六进制。刚开始做题认为每个数据块输出一个整数,这需要2^(5*64)这么大的数来存储,难道要用大整数类?后来一想,可以每一个十六进制位输出一次便可
0 0
- UVa509 - RAID!
- uva509 RAID
- 习题4-7 RAID技术 UVa509
- 算法竞赛入门经典(第2版)习题4-7 RAID技术 RAID! UVa509
- [刷题]算法竞赛入门经典(第2版) 4-7/UVa509 - RAID!
- RAID
- RAID
- RAID
- raid
- RAID
- RAID
- RAID
- RAID
- RAID
- RAID
- raid
- RAID
- RAID
- hduoj4548(美素数)
- 年尾最有可能被老板“干掉”的十类人
- 烫手山芋——物联网
- 从零开始学C++之构造函数与析构函数(三):深拷贝与浅拷贝、空类与空数组
- 从零开始学C++之对象的使用(一):static 成员变量、static 成员函数、类/对象的大小
- UVa509 - RAID!
- 从零开始学C++之对象的使用(二):四种对象生存期和作用域、static 用法总结
- Hook api! 如何拦截系统api, 让它做你想做的事!
- POJ 2527 : Polynomial Remains - 多项式除法
- 从零开始学C++之对象的使用(三):static 与单例模式、auto_ptr与单例模式、const 用法小结、mutable修饰符
- 在iPhone上执行后台任务
- vijos1112小胖的奇偶(并查集,区间转两端线段)
- fragment动态加载
- 从零开始学C++之数据封装与抽象:分别用C和C++来实现一个链栈