news 2026/6/16 11:42:50

UVa 509 RAID

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
UVa 509 RAID

题目描述

题目要求验证和恢复RAID\texttt{RAID}RAID磁盘阵列中的数据。系统使用多个磁盘,每个磁盘被划分为若干块(block\texttt{block}block),每个块由若干位(bit\texttt{bit}bit)组成。数据块和奇偶校验块按列分布,奇偶校验块在每列中轮换位置。奇偶校验可以是偶校验(E\texttt{E}E,所有数据位和校验位的异或结果为000)或奇校验(O\texttt{O}O,异或结果为111)。输入给出每个磁盘上所有位的状态(01x表示不可用),需要判断数据是否有效,若有效则恢复所有数据并转换为十六进制输出。

输入格式

每个数据集包含:

  • 第一行三个整数:磁盘数ddd2≤d≤62 \le d \le 62d6)、块大小sss1≤s≤641 \le s \le 641s64)、每磁盘块数bbb1≤b≤1001 \le b \le 1001b100)。
  • 第二行一个字符:E(偶校验)或O(奇校验)。
  • 接下来ddd行,每行s×bs \times bs×b个字符(01x),表示该磁盘上所有位的值(高位在前)。
    输入以d=0d = 0d=0结束。

输出格式

对于每个数据集,输出一行:

  • 若有效,输出Disk set X is valid, contents are: 十六进制字符串
  • 若无效,输出Disk set X is invalid.

样例

输入

5 2 5 E 0001011111 0110111011 1011011111 1110101100 0010010111 3 2 5 E 0001111111 0111111011 xx11011111 3 5 1 0 11111 11xxx x1111 0

输出

Disk set 1 is valid, contents are: 6C7A79EDF Disk set 2 is invalid. Disk set 3 is valid, contents are: FFC

题目分析

本题的核心是按列处理磁盘数据,每列包含ddd个磁盘的相同位置位。奇偶校验块在该列中轮换位置,需要识别出校验块的位置,并根据校验规则恢复缺失位和验证正确性。

数据结构

将数据组织为b×db \times db×d的块矩阵,每个块是一个长度为sss的二进制字符串。按列处理:第iii列(000索引)的奇偶校验块位置为p=i mod dp = i \bmod dp=imodd。每个位位置jjj000s−1s-1s1)的ddd个位构成一组。

处理流程

对于每列iii和每个位位置jjj

  1. 收集ddd个磁盘的对应位,统计x的数量和位置。
  2. x数量≥2\ge 22,则数据无效。
  3. x数量=1= 1=1,则根据奇偶规则恢复该位(异或所有已知位后,确定缺失位的值)。
  4. x数量=0= 0=0,则验证异或结果是否符合奇偶规则。若不符合,则数据无效。
  5. 将所有非校验块的数据位收集起来,按顺序拼接成二进制字符串。
  6. 末尾补0使长度为444的倍数,转换为十六进制。

奇偶计算

  • 偶校验:所有位的异或结果为000
  • 奇校验:所有位的异或结果为111

复杂度分析

总数据位数为d×s×bd \times s \times bd×s×b,每个位处理一次,时间复杂度O(d×s×b)O(d \times s \times b)O(d×s×b)

代码实现

// RAID!// UVa ID: 509// Verdict: Accepted// Submission Date: 2017-04-26// UVa Run Time: 0.010s//// 版权所有(C)2017,邱秋。metaphysis # yeah dot net#include<bits/stdc++.h>usingnamespacestd;intmain(intargc,char*argv[]){cin.tie(0),cout.tie(0),ios::sync_with_stdio(false);intcases=0;intdisk,size,block;charparity,bit;charhexadecimal[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};while(cin>>disk,disk>0){cin>>size>>block>>parity;vector<vector<string>>data(block,vector<string>());// read input.for(inti=0;i<disk;i++)for(intj=0;j<block;j++){string bits;for(intk=0;k<size;k++){cin>>bit;bits+=bit;}data[j].push_back(bits);}boolvalid=true;string content,hexText;// p is the index of parity block.for(inti=0,p=0;i<block;i++,p++,p%=disk){for(intj=0;j<size;j++){string bits;for(intk=0;k<disk;k++)bits+=data[i][k][j];intunavailableBits=0,unavailableIdx=-1;for(intx=0;x<bits.size();x++){if(bits[x]=='x'){unavailableBits++;if(unavailableIdx==-1)unavailableIdx=x;}}// too many unavailable bitsif(unavailableBits>=2){valid=false;gotoprint;}// reconstructe unavailable bitelseif(unavailableBits==1){// replace the unavailable bit and checkbits[unavailableIdx]='1';intr=bits.front()-'0';for(intx=1;x<bits.size();x++)r^=(bits[x]-'0');if((parity=='E'&&r==1)||(parity=='O'&&r==0))bits[unavailableIdx]='0';// setdata[i][unavailableIdx][j]=bits[unavailableIdx];}// check parity error or notelse{intr=bits.front()-'0';for(size_t x=1;x<bits.size();x++)r^=(bits[x]-'0');if((parity=='E'&&r==1)||(parity=='O'&&r==0)){valid=false;gotoprint;}}}// merge all data block but prity blockfor(intj=0;j<disk;j++)if(j!=p)content+=data[i][j];}// translate the binary text to hexadecimal text.while(content.size()%4!=0)content+='0';for(inti=0;i<content.size();i+=4)hexText+=hexadecimal[stoi(content.substr(i,4),0,2)];// output.print:cout<<"Disk set "<<++cases;if(valid)cout<<" is valid, contents are: "<<hexText<<'\n';elsecout<<" is invalid.\n";}return0;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/16 11:42:50

3分钟快速上手:全球地理数据可视化终极指南

3分钟快速上手&#xff1a;全球地理数据可视化终极指南 【免费下载链接】world.geo.json Annotated geo-json geometry files for the world 项目地址: https://gitcode.com/gh_mirrors/wo/world.geo.json 你是否曾为获取标准化的全球地理边界数据而烦恼&#xff1f;wor…

作者头像 李华
网站建设 2026/6/16 11:41:51

LinkSwift网盘直链下载助手:八大平台免费下载加速终极指南

LinkSwift网盘直链下载助手&#xff1a;八大平台免费下载加速终极指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云盘 / …

作者头像 李华
网站建设 2026/6/16 11:36:49

如何3分钟实现Figma界面全中文:设计师必备的本地化解决方案

如何3分钟实现Figma界面全中文&#xff1a;设计师必备的本地化解决方案 【免费下载链接】figmaCN 中文 Figma 插件&#xff0c;设计师人工翻译校验 项目地址: https://gitcode.com/gh_mirrors/fi/figmaCN 你是否在使用Figma时感到语言障碍&#xff1f;面对"Auto La…

作者头像 李华
网站建设 2026/6/16 11:30:55

海洋具身智能崛起:世航智能获超10亿融资,机器人挑战水下苦力活

超10亿融资&#xff0c;海洋具身智能新突破具身智能领域又有大动作&#xff0c;6月15日&#xff0c;海洋具身智能公司世航智能宣布完成超10亿元A轮融资&#xff0c;这可是目前全球海洋机器人领域规模最大的单轮融资。强大投资方阵容这轮融资的投资方不少。新投资人有上河动量基…

作者头像 李华
网站建设 2026/6/16 11:28:59

序列到序列模型的深度解析与实现

引言 在自然语言处理、时间序列预测等领域,序列到序列(Seq2Seq)模型已经成为了一个关键工具。特别是利用LSTM(长短期记忆网络)来处理这种问题,显得尤为重要。本文将深入探讨如何利用PyTorch实现一个简单的Seq2Seq模型,结合实际例子来理解其工作原理和常见问题。 问题背…

作者头像 李华
网站建设 2026/6/16 11:24:51

ImageGlass图像浏览器终极指南:如何免费查看90+种图片格式

ImageGlass图像浏览器终极指南&#xff1a;如何免费查看90种图片格式 【免费下载链接】ImageGlass &#x1f3de; A fast, open-source, modern image viewer for 90 formats – including WEBP, GIF, SVG, AVIF, JXL, HEIC and more – built for smooth browsing across Wind…

作者头像 李华