思路来自: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. Linux 系统根目录下各个文件夹的作用

    原文: https://blog.csdn.net/qq_26941173/article/details/78376760 /bin 系统由很多放置可执行文件的目录,但是bin目录比较特殊.因为bi ...

  2. easyui合并多个单元格

    $('#table-v2').datagrid({ url: './data/am/data1_table.json', pagination: true, //显示分页 fit: true, //d ...

  3. nginx+tomcat实现集群,redis实现session共享,软连接实现文件共享:http://blog.csdn.net/hua1586981/article/details/78132710

    转载 2017年02月08日 16:52:41 730 相信很多人都听过nginx,这个小巧的东西慢慢地在吞食apache和IIS的份额.那究竟它有什么作用呢?可能很多人未必了解. 说到反向代理,可能 ...

  4. MySQL慢查询 - 开启慢查询

    一.简介 开启慢查询日志,可以让MySQL记录下查询超过指定时间的语句,通过定位分析性能的瓶颈,才能更好的优化数据库系统的性能. 二.参数说明 slow_query_log 慢查询开启状态 slow_ ...

  5. WPF编程之找不到资源mainWindow.xaml

    原文: WPF编程之找不到资源“window1.xaml”之谜 因为将启动窗口移动到了一个新建的文件夹中,启动调试时报找不到资源mainWindow.xaml,原来是App.xaml里面设置的启动窗口 ...

  6. C#学习-索引器

    当一个类包含数组成员时,索引器的使用将大大地简化对类中数组成员的访问. 索引器的定义类似于属性,也具有get访问器和set访问器,以下是 [修饰符] 数据类型 this [索引类型index] { g ...

  7. nginx配置http和https共存

    server { listen ; listen ssl; server_name localhost; #ssl on; ssl_certificate /usr/local/Tengine/ssl ...

  8. [转] 对express中next函数的一些理解

    最近公司在使用node做前后端分离,采用的web框架是express,所以对express框架进行了深入的了解,前段时间写了篇关于express路由的文章,但是在那篇文章中貌似少了一个很重要的内容,就 ...

  9. Centos7编译安装GCC7.2

    通常编译的时候可能需要新版本的gcc,本文就说明下基于低版本的gcc升级为gcc7.2 wget 'http://mirrors-usa.go-parts.com/gcc/releases/gcc-7 ...

  10. bzoj 4621: Tc605 动态规划

    题解: 一道比较简单的题目 想着想着就把题目记错了..想成了可以把某段区间覆盖为其中一个数 其实是比较简单的 每个点的贡献一定是一个区间(就跟zjoi2018那题一样) 然后问题就变成了给你n个区间让 ...