思路来自: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!的更多相关文章

  1. uva 509 RAID!(磁盘数据)

    来自 https://blog.csdn.net/su_cicada/article/details/80085318 习题4-7 RAID技术(RAID!, ACM/ICPC World Final ...

  2. 位运算基础(Uva 1590,Uva 509题解)

    逻辑运算 规则 符号 与 只有1 and 1 = 1,其他均为0 & 或 只有0 or 0 = 0,其他均为1 | 非 也就是取反 ~ 异或 相异为1相同为0 ^ 同或 相同为1相异为0,c中 ...

  3. 【习题 4-7 UVA - 509】RAID!

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 如果一行里面某位有>1个x 那么是invalid的. 没有x的话. 可以分析以下(设输入的标准Even为0,然后Odd为1) ...

  4. 【转】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 / ...

  5. UVA 1412 Fund Management (预处理+状压dp)

    状压dp,每个状态可以表示为一个n元组,且上限为8,可以用一个九进制来表示状态.但是这样做用数组开不下,用map离散会T. 而实际上很多九进制数很多都是用不上的.因此类似uva 1601 Mornin ...

  6. 一张“神图”看懂单机/集群/热备/磁盘阵列(RAID)

    单机部署(stand-alone):只有一个饮水机提供服务,服务只部署一份 集群部署(cluster):有多个饮水机同时提供服务,服务冗余部署,每个冗余的服务都对外提供服务,一个服务挂掉时依然可用 热 ...

  7. 什么是RAID?RAID有什么用?RAID原理

    什么是RAID 硬盘是个很脆弱的东西,它经常会坏掉.所以,为了保证服务器可靠耐用,硬盘必须时时刻刻保持可用.所以有了RAID这个东西.它的目的是将好几个硬盘合并在一起,就算硬盘坏了一个,剩下还有好几个 ...

  8. 3.raid基础应用

    raid分为软备份和硬备份 软备份主要用来实验 应备份用于生产环境 raid0(带区卷)    具有很高的数据传输率,没有数据的冗余  1块磁盘 raid1(镜像卷)  提供数据冗余,利用率低  2块 ...

  9. PIC12F508/505/509/510/506/519/526/527单片机破解芯片解密方法!

    IC芯片解密PIC12F508/505/509/510/506/519/526/527单片机破解 单片机芯片解密型号: PIC12F508解密 | PIC12F505解密 | PIC12F506解密  ...

随机推荐

  1. MYSQL之 error while loading shared libraries: libtinfo.so.5: cannot open shared objectfile: No such f

    环境:ubuntu18 登陆MYSQL时遇到错误:mysql: error while loading shared libraries: libtinfo.so.5: cannot open sha ...

  2. go包之logrus显示日志文件与行号

    前言: logrus是go中比较好的一个log模块.github上的很多开源项目都在使用这个模块, 我在写这个博文时, github上的logrus的stars数已经有8214了.最近在用这个模块时, ...

  3. postMan测试https接口

    一.如何安装postman? Postman下载地址https://www.getpostman.com/ 我下载的版本是Postman-win64-5.0.0-Setup.exe 这是免安装的,可以 ...

  4. python列表1

    List (列表)List(列表) 是 Python 中使用最 频繁的数据类 型.列表 可以 完成大 多数集 合类 的数据 结构 实现. 列表中 元素 的类型 可以 不相同 ,它支 持数 字,字 符串 ...

  5. 20165206 实验一 Java开发环境的熟悉

    20165206 实验一 Java开发环境的熟悉 一.实验内容及步骤 实验一 Java开发环境的熟悉-1 建立有自己学号的实验目录. 通过vim Hello.java编辑代码. 编译.运行Hello. ...

  6. CAS—认证原理

    CAS,Central Authentication Service—中央认证服务,是Yale 大学发起的一个企业级的.开源的项目,旨在为Web应用系统提供一种可靠的SSO解决方案.下面简单介绍SSO ...

  7. ubuntu中vim下按上下左右键时输入A、B、C、D

    ubuntu系统自带的 vi 不完整导致,解决方法:安装完整的vi $ sudo apt-get install vim-gtk 1. 为root用户设置密码 sudo passwd root 需要先 ...

  8. 一脸懵逼学习Zookeeper(动物园管理员)---》高度可靠的分布式协调服务

    1:Zookeeper是一个分布式协调服务:就是为用户的分布式应用程序提供协调服务 A.zookeeper是为别的分布式程序服务的 B.Zookeeper本身就是一个分布式程序(只要有半数以上节点存活 ...

  9. [转] iOS9系统自带字体

    Family: Thonburi Font: Thonburi-Bold Font: Thonburi Font: Thonburi-Light 1 2 3 4 Family: Khmer Sanga ...

  10. python 链接数据库错误

    用python3链接oracle产生错误: DPI-1047: Cannot locate a 64-bit Oracle Client library: "The specified mo ...