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解密 ...
随机推荐
- 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 ...
- go包之logrus显示日志文件与行号
前言: logrus是go中比较好的一个log模块.github上的很多开源项目都在使用这个模块, 我在写这个博文时, github上的logrus的stars数已经有8214了.最近在用这个模块时, ...
- postMan测试https接口
一.如何安装postman? Postman下载地址https://www.getpostman.com/ 我下载的版本是Postman-win64-5.0.0-Setup.exe 这是免安装的,可以 ...
- python列表1
List (列表)List(列表) 是 Python 中使用最 频繁的数据类 型.列表 可以 完成大 多数集 合类 的数据 结构 实现. 列表中 元素 的类型 可以 不相同 ,它支 持数 字,字 符串 ...
- 20165206 实验一 Java开发环境的熟悉
20165206 实验一 Java开发环境的熟悉 一.实验内容及步骤 实验一 Java开发环境的熟悉-1 建立有自己学号的实验目录. 通过vim Hello.java编辑代码. 编译.运行Hello. ...
- CAS—认证原理
CAS,Central Authentication Service—中央认证服务,是Yale 大学发起的一个企业级的.开源的项目,旨在为Web应用系统提供一种可靠的SSO解决方案.下面简单介绍SSO ...
- ubuntu中vim下按上下左右键时输入A、B、C、D
ubuntu系统自带的 vi 不完整导致,解决方法:安装完整的vi $ sudo apt-get install vim-gtk 1. 为root用户设置密码 sudo passwd root 需要先 ...
- 一脸懵逼学习Zookeeper(动物园管理员)---》高度可靠的分布式协调服务
1:Zookeeper是一个分布式协调服务:就是为用户的分布式应用程序提供协调服务 A.zookeeper是为别的分布式程序服务的 B.Zookeeper本身就是一个分布式程序(只要有半数以上节点存活 ...
- [转] iOS9系统自带字体
Family: Thonburi Font: Thonburi-Bold Font: Thonburi Font: Thonburi-Light 1 2 3 4 Family: Khmer Sanga ...
- python 链接数据库错误
用python3链接oracle产生错误: DPI-1047: Cannot locate a 64-bit Oracle Client library: "The specified mo ...