2019-3-CCF第三题损坏的raid5
时间:2019-04-19
本文章向大家介绍2019-3-CCF第三题损坏的raid5,主要包括2019-3-CCF第三题损坏的raid5使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
参考代码
#include<bits/stdc++.h>
#define UP(x) for(uint32_t i=0;i<x;i++)
typedef unsigned int uint32_t;
using namespace std;
uint32_t len = 0;
//异或操作
char getc(char c){
if(c<10)
return c+'0';
else if(c<=16)
return c+'A'-10;
else if(c<='9')
return c-'0';
else if(c<='F')
return c-'A'+10;
}
void yh(string &a,string b){
UP(8){
a[i]=getc(getc(a[i])^getc(b[i]));
}
}
void getdata(string dskd[],uint32_t n,uint32_t s,uint32_t l,uint32_t r){
uint32_t level=r/((n-1)*s); //获取读取的数据层数
uint32_t curp=(n-level%n)-1; //获取读取的数据层数P块所在位置
uint32_t blk=level*s+r%s; //获取数据所在硬盘的块索引
uint32_t disk=r%((n-1)*s)/s+curp+1; //获取读取的数据所在硬盘索引
disk=disk%n;
if(len<blk*8+8||len==0){ //如果获取的长度超过了硬盘数据长度,直接输出减号退出
cout<<"-"<<endl;
return;
}
if(dskd[disk].length()!=0) //如果当前盘存在,直接输出
cout<<dskd[disk].substr(blk*8,8)<<endl;
else if(dskd[disk].length()==0&&n-l==1){ //如果当前盘缺失,且可以恢复,则通过异或读取对应的数据
string str="00000000";
UP(n){
if(i!=disk)
yh(str,dskd[i].substr(blk*8,8));
}
cout<<str<<endl;
}else
cout<<"-"<<endl; //如果当前盘缺失且不可以恢复,输出减号。
}
int main(){
ios::sync_with_stdio(false);
uint32_t n,s,l;
cin>>n>>s>>l;
string dskd[1010];
uint32_t dpos;
UP(l){
cin>>dpos;
cin>>dskd[dpos];
}
uint32_t m;
cin>>m;
uint32_t a[1000];
UP(m){
cin>>a[i];
}
UP(n){
if(dskd[i].length()!=0){
len = dskd[i].length();
break;
}
}
UP(m){
getdata(dskd,n,s,l,a[i]);
}
return 0;
}
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Python小白爬虫入门的第一个案例:爬取全站小说
- Python基础入门知识点——字符串的介绍
- 文章要保存为TXT文件,其中的图片要怎么办?Python帮你解决
- 分析B站弹幕,川普同志暴露的那一天,没有一个鬼畜up是无辜的
- python-爬取地理坐标
- Python基础第一个案例:猜数字游戏,这个都写不出,那就放弃吧
- 现在听歌要各大平台到处跑,嫌麻烦?制作个人专属的音乐下载器
- 爬取上市公司数据、分析数据,并用可视化现实全国各地区公司数量
- 今天刚上手爬虫,当然要从最简单的开始啦,验证一下所学的知识
- Python数据可视化入门:使用Matplotlib绘图
- 有了音乐下载器,怎么能没有音乐播放器呢,打造自己的音乐播放器
- 七夕节到了,单身狗程序员要对自己好点,用代码送自己点安慰
- 面向对象视角下的前端工程体系
- 使用 Python破解大众点评字体加密(SVG反爬虫)
- Python爬虫练习:爬取高清4K桌面壁纸