思路来自: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. 如何编辑PDF文件,怎么使用PDF裁剪页面工具

    在编辑PDF文件的时候,往往会有很多的小技巧可以使用,在编辑PDF文件的时候,怎么对文件的页面进行裁剪呢,不会的话,看看下面的文章吧,小编已经为大家整理好了哦. 1.打开运行PDF编辑器,在编辑器中打 ...

  2. hdu2871 区间合并(类似poj3667)+vector应用

    用vector进行插入和删除操作! 总是有些地方处理不好,对拍了才知道错在哪里,, /* 给定一些操作 reset 清空 new a ,申请最左边的连续a个空间 free a,清空a所在的块 get ...

  3. shell脚本批量创建用户

    #!/bin/bash DATE=$(date +%F_%T) USER_FILE=user.txt echo_color() { == "green" ];then echo - ...

  4. postMan测试https接口

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

  5. JAVA之复制数组

    //复制数组 //Arrays.copyOf(arr, 5) //arr:要复制的对象,5为新数组的长度 import java.util.Arrays; public class Cope { pu ...

  6. 2017-2018-2 20165328 实验三《敏捷开发与XP实践》实验报告

    一.实践-1: 要求:参考http://www.cnblogs.com/rocedu/p/6371315.html#SECCODESTANDARD安装alibaba插件,解决代码中的规范问题. 在ID ...

  7. SpringBoot整合Kafka

    一.准备工作 提前启动zk,kafka,并且创建一个Topic("Hello-Kafk") bin/kafka-topics.sh --create --zookeeper 192 ...

  8. 应用程序池--IIS最大工作进程数

    IIS 6.0允许将应用程序池配置成一个Web园(Web Garden).要理解Web园的概念,可以设想这样一种情形:假设有一个IIS 5.0服务器和三个Web网站,每一个Web网站运行着相同的应用程 ...

  9. [转] JavaScript设计模式之发布-订阅模式(观察者模式)-Part1

    <JavaScript设计模式与开发实践>读书笔记. 发布-订阅模式又叫观察者模式,它定义了对象之间的一种一对多的依赖关系.当一个对象的状态发生改变时,所有依赖它的对象都将得到通知. 例如 ...

  10. [转]Centos 查看端口占用情况和开启端口命令

    http://www.cnblogs.com/xqzt/p/4919191.html 1.Centos 查看端口占用 比如查看 80 端口占用情况使用如下命令: lsof -i tcp:80 2.列出 ...