我在这题卡了一天,心态有点小崩。不过最后AC的时候还是很开心的。

坑点:1.注意当两个及以上disc无法读取时,输入不合法。

2.当校验结果与预期ans不同时,输入不合法。

其它都为合法情况。

当合法时,校验块不能作为数据读取,所以要判断磁盘储存区是否为校验块。

最后将二进制转化为十六进制串时如比特数量不是4的整数,应当在ans串末尾补零。我采用string流和transform函数来进行进制转换,也可以用bitset。

原题:

代码:

#include<iostream>
#include<algorithm>
#include<string>
#include<sstream>//stringstream
#include<vector>//采用二维向量储存字符串
#include<iomanip>
using namespace std;
int main(void)
{ios::sync_with_stdio(false);//关闭流同步cin.tie(0);cout.tie(0);long long d,s,b,kase=1;while(cin>>d&&d){cin>>s>>b;char parity;cin>>parity;vector<vector<string>> RAID;//模拟discsetRAID.clear();string ANS="";//待定答案long long cnt=0;for(int i=0;i<b;i++){vector<string> init(d,"");RAID.push_back(init);}//二维向量初始化for(int i=0;i<d;i++){string temp;cin>>temp;int k=0;for(int j=0;j<s*b;j+=s){RAID[k][i]=temp.substr(j,s);k++;}//对输入字符串切串储存在disc中}int ans;bool flag=true;//判断输入是否合法if(parity=='E')//偶校验{ans=0;}else//奇校验{ans=1;}for(int i=0;i<b;i++)//这里注意循环嵌套的次序{for(int k=0;k<s;k++){int final=-10,pro=-10;//final存储异或结果,pro存储x位置for(int j=0;j<d;j++)//对于每一层各data存段的第k个字符进行遍历{if(RAID[i][j][k]=='0'){if(final<0){final=0;}else{final^=0;}}else if(RAID[i][j][k]=='1'){if(final<0){final=1;}else{final^=1;}}else if(RAID[i][j][k]=='x'){if(pro<0){pro=j;}else//如果在同一层同字节有超过一个x则非法{flag=false;goto out;}}}if(pro>=0)//求x值{if(ans){RAID[i][pro][k]=(!final)+'0';final=1;}else{RAID[i][pro][k]=final+'0';final=0;}}else//无x时判断校验结果{if(ans!=final){flag=false;goto out;}}}}for(int i=0;i<b;i++){for(int j=0;j<d;j++){if(j!=cnt){ANS+=RAID[i][j];//查询答案序列}}cnt++;cnt%=d;}out:cout<<"Disk set "<<kase++<<" is ";if(flag){cout<<"valid, contents are: ";long long len=ANS.length();while(len%4)//补0操作{ANS+="0";len++;}for(int i=0;i<len;i+=4)//按每4个字符切串转进制{string sub,HEX;sub=ANS.substr(i,4);stringstream ss;ss<<hex<<stoi(sub,nullptr,2);ss>>HEX;transform(HEX.begin(),HEX.end(),HEX.begin(),::toupper);cout<<HEX;}cout<<endl;}else{cout<<"invalid."<<endl;}}return 0;
}

Uva509 RAID相关推荐

  1. 《算法竞赛入门经典(第2版)》——学习记录

    前言:   这里主要记录本人在学习紫书过程中充分理解过的题目的AC代码,便于以后回顾时查找代码和思路,毕竟看别人的真的有点难懂.此外,本书甚至是本书之外的相关知识学习也可能在此留下记录.   作为一只 ...

  2. RAID详解[RAID0/RAID1/RAID10/RAID5]

    一.RAID定义RAID(Redundant Array of Independent Disk 独立冗余磁盘阵列)技术是加州大学伯克利分校1987年提出,最初是为了组合小的廉价磁盘来代替大的昂贵磁盘 ...

  3. [svc]磁盘接口与RAID

    一 磁盘接口 IDE 传统家用: /dev/hda1 SISC 传统服务器: /dev/sdb1 SATA 现在家用 SAS 现在服务器用 FC(光纤通道) 高级服务器 注意: 分区编号,1-4只能给 ...

  4. boos里的AHCI RAID_安徒恩Raid删除,安徒恩讨伐战上线,详细攻略快速看,成为新的摸金圣地...

    在4月23日的更新之后,安徒恩Raid模式与安徒恩普通模式均被删除,取而代之的是全新的模式"安徒恩讨伐战". 角色达到85级,完成任务之后即可进入安徒恩讨伐战副本,副本位置还是在原 ...

  5. 4块硬盘做raid几_HP-P4500存储RAID硬盘离线数据恢复案例

    在这里北亚小编分享一篇关于HP-P4500存储RAID硬盘离线数据恢复案例,经客户描述:一台HP-P4500的存储系统,底层是12块1TB的硬盘组的RAID.其中每6个1TB的盘一组,第一组的前面一部 ...

  6. Linux磁盘阵列技术详解(二)--raid 1创建

    我在Linux磁盘阵列技术详解(一)里已经详细介绍了几种RAID磁盘阵列方式,原理以及创建raid 0 的详细步骤.那么这篇文档就着重讲解如何创建raid 1的技术: 步骤如下: ① 分区 同样我们还 ...

  7. IBM X3550 RAID 扩容实例

    背景:系统更新,原服务器容量不足,原服务器硬盘配置如下:2块146G 10K SAS 硬盘组成的RAID 1,咨询供应商,原来的硬盘已停产,现只有直接上两块新的盘增加一个RAID 1 实现扩容,增加两 ...

  8. Netapp存储基础之WAFL, NVRAM, RAID, SnapShot

    此章节是重点之重点.先讲基本概念.WAFL的全称是Write Anywhere File Layout. 从类似于其它UNIX的文件系统比如Berkeley Fast File System (FFS ...

  9. shell脚本编程基础(1)及RAID阵列

    shell脚本: Linux从底层到上层的系统架构:硬件-->内核-->库(lib)-->shell-->用户. shell既是一种命令语言,也是程序设计语言(shell脚本) ...

最新文章

  1. 如何高效的通过BP算法来训练CNN
  2. p2320bzoj1192 鬼谷子的钱袋
  3. vue 监控元素宽度_Vue入门系列之Vue实例详解与生命周期
  4. Angular2-关闭占用的4200端口
  5. Developing Web Applications with Apache, MySQL, memcached, and Perl
  6. [UVALive 3983] Robotruck
  7. 用VS.NET 2005制作安装程序
  8. orm php 自定义,Eloquent ORM 自定义 builder
  9. 北京邮电大学计算机学院合并,北京邮电大学院系重组
  10. 网络战争全面打响!究竟谁能更胜一筹?
  11. 4个简单有效的网页视频下载方法,超级简单好用
  12. CANVAS LMS开源系统
  13. 区块链与安全多方计算结合
  14. 小米智能电视怎么投屏
  15. 2020上海高校程序设计竞赛暨第18届上海大学程序设计联赛夏季赛(同步赛)整理合集
  16. 第22期状元简讯:支付宝母公司斥资11.8亿元控股天弘基金
  17. BalsamiqMockups3 原型制作工具使用笔记
  18. 反向代理原理反向代理服务器配置解决访问加速
  19. 手写Android性能监测工具,支持Fps/流量/内存/启动等
  20. 启明星辰集团CEO严望佳:与AI共生,共建以人为本的数字善治生态体系

热门文章

  1. 什么是同源策略,所带来的影响
  2. 使用rpm包制作本地镜像仓库和使用httpd发布镜像服务实现内网使用yum命令
  3. 1015:计算并联电阻的阻值
  4. 建议收藏!这10个学习编程的小技巧,万人点赞!
  5. Simulink学习笔记
  6. (附带一键脚本)Android安卓手机使用linuxdeploy做debian服务器安装homeassistant教程
  7. Deepin UOS 20安装(附带镜像文件)
  8. linux命令详解及软件安装(全)
  9. IJPay微信退款协议不正确 No appropriate protocol
  10. linux解决bash: nc: command not found 安装nc、telnet、yum