UVA 509 RAID!
思路来自:https://blog.csdn.net/wcr1996/article/details/43834545
先解释一下题意:
①输入:先输入d(disk的数量) s(每块数据块有s个bit) b(每块disk上的数据块和校验块的数目),再输入d行数据。
②奇偶校验:E偶校验 :1的个数为偶:0
· 奇:1
O奇校验: 1个数为偶:0
1的个数为奇:1
③disk表:

此图就是校验位和数据存放的位置,但是输入是每条每条的disk(表中竖着的)。
思路如下:
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
int d,s,b,n;
char disk[][];
int op;
int read()//读入函数
{
scanf("%d%d%d\n",&d,&s,&b);
if(d==)
return ;
memset(disk,,sizeof(disk));
char ch=getchar();
if(ch=='O')
op=;
else
op=-;
n=s*b;
for(int i=;i<d;i++)
scanf("%s",disk[i]);
return ;
}
int solve()
{
for(int i=;i<n;i++)//n=s*b,为一个disk中的所有数据
{
int k=-;
int broke=-;
for(int j=;j<d;j++)
{
char c=disk[j][i];
if(c=='')
k=-k;
if(c=='x')//记下位置
{
if(broke!=-)
return ;
else
broke=j;
}
}
if(broke==-&&k!=op) return ;//校验不合法
if(broke!=-)
disk[broke][i]=k==op?'':'';//修复
//偶校验:op=-1,k==-1(偶数个1)补0;k=1(偶数个),补1。
//奇校验:op=1,k==1(奇数个1) 补0;k=-1(偶数个),补1.
}
return ;
}
void print(int v)
{
if(v==)
{
printf("invalid.\n");
return;
}
printf("valid, contents are: ");
int num=,cnt=;
for(int i=;i<b;i++)
{
int pos=i*s;
for(int j=;j<d;j++)
{
if(i%d==j)
continue;
for(int k=;k<s;k++)
{
num<<=;
num+=disk[j][pos+k]=='';
cnt++;
if((cnt%=)==)
printf("%X",num),num=;
}
}
}
if(cnt)
printf("%X",num<<(-cnt));//补0
printf("\n");
return;
}
int main()
{
int t=;
while(read()!=)
{
printf("Disk set %d is ",++t);
print(solve());
}
return ;
}
UVA 509 RAID!的更多相关文章
- uva 509 RAID!(磁盘数据)
来自 https://blog.csdn.net/su_cicada/article/details/80085318 习题4-7 RAID技术(RAID!, ACM/ICPC World Final ...
- 位运算基础(Uva 1590,Uva 509题解)
逻辑运算 规则 符号 与 只有1 and 1 = 1,其他均为0 & 或 只有0 or 0 = 0,其他均为1 | 非 也就是取反 ~ 异或 相异为1相同为0 ^ 同或 相同为1相异为0,c中 ...
- 【习题 4-7 UVA - 509】RAID!
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 如果一行里面某位有>1个x 那么是invalid的. 没有x的话. 可以分析以下(设输入的标准Even为0,然后Odd为1) ...
- 【转】UVa Problem 100 The 3n+1 problem (3n+1 问题)——(离线计算)
// The 3n+1 problem (3n+1 问题) // PC/UVa IDs: 110101/100, Popularity: A, Success rate: low Level: 1 / ...
- UVA 1412 Fund Management (预处理+状压dp)
状压dp,每个状态可以表示为一个n元组,且上限为8,可以用一个九进制来表示状态.但是这样做用数组开不下,用map离散会T. 而实际上很多九进制数很多都是用不上的.因此类似uva 1601 Mornin ...
- 一张“神图”看懂单机/集群/热备/磁盘阵列(RAID)
单机部署(stand-alone):只有一个饮水机提供服务,服务只部署一份 集群部署(cluster):有多个饮水机同时提供服务,服务冗余部署,每个冗余的服务都对外提供服务,一个服务挂掉时依然可用 热 ...
- 什么是RAID?RAID有什么用?RAID原理
什么是RAID 硬盘是个很脆弱的东西,它经常会坏掉.所以,为了保证服务器可靠耐用,硬盘必须时时刻刻保持可用.所以有了RAID这个东西.它的目的是将好几个硬盘合并在一起,就算硬盘坏了一个,剩下还有好几个 ...
- 3.raid基础应用
raid分为软备份和硬备份 软备份主要用来实验 应备份用于生产环境 raid0(带区卷) 具有很高的数据传输率,没有数据的冗余 1块磁盘 raid1(镜像卷) 提供数据冗余,利用率低 2块 ...
- PIC12F508/505/509/510/506/519/526/527单片机破解芯片解密方法!
IC芯片解密PIC12F508/505/509/510/506/519/526/527单片机破解 单片机芯片解密型号: PIC12F508解密 | PIC12F505解密 | PIC12F506解密 ...
随机推荐
- bzoj 3191
非常好的一道题 看到这道题,肯定能想到概率dp,但是状态的设计与转移都是一个难点 如果正向模拟来设计状态,那么不难发现是很难以转移的 所以我们考虑反向模拟,用类似博弈的方法来转移 不难发现,如果只剩了 ...
- mysql一列相同另一列相加
select name, sum(number) total from test group by name;
- WEB测试总结
WEB测试总结:1.js文件session是否有缓存,如果没有缓存对服务器压力会很大:2.更改页面大小后,图表是否会再次向服务器请求数据:3.表单填写是否对html标识,script脚本做处理:(&l ...
- ORA-27157 ORA-27300 ORA-27301
目录: 问题现象 原因分析 解决方案 问题现象: 收到同事反馈,数据库无法连接.于是登录服务器发现,数据库莫名挂掉.实例crash,日志中记录截取一段如下: Errors in file /u01/a ...
- python 装饰器--对有无参数的函数进行装饰
# 使用装饰器无参数的函数进行装饰# def func(funcionName): # print('-----1------') # def func_in(): # print('--func_i ...
- mybatis + oracle insert clob,出现ORA-01461:仅能绑定要插入LONG列的LONG值
在网上查了很久,有可能问题是出现在当从dual中取数据时,会将clob对象的字段转为Long型 最后的解决方法用到了Begin和end语法: 1.用到begin 和end 2.用到insert int ...
- 使用python解决算法和数据结构--使用栈实现符号匹配
现在要自己来实现这些数据结构和常用算法了. 把基础再打牢一些. 栈的作用很大,无须多言. 我尽量看了题目要求,自己来实现代码的. # coding = utf-8 class Stack: def _ ...
- eclipse中文乱码修改新方法
方法背景:想看别人的JAVA项目,导入eclipse后出现中文乱码,在设置了所有的工作空间都为UTF-8以后都没有用,并且项目Resource选项没有GBK选项,或统一选择GBK后会使其他项目出现中文 ...
- [转] mongoose学习笔记(超详细)
名词解释 Schema: 一种以文件形式存储的数据库模型骨架,不具备数据库的操作能力 Model: 由Schema编译而成的假想(fancy)构造器,具有抽象属性和行为.Model的每一个实例(ins ...
- 51Nod1253 Kundu and Tree 容斥原理
原文链接https://www.cnblogs.com/zhouzhendong/p/51Nod1253.html 题目传送门 - 51Nod1253 题意 树包含 N 个点和 N-1 条边.树的边有 ...