首页 > 其他 > 详细

ccf损坏的RAID5

时间:2019-08-16 12:42:52      阅读:72      评论:0      收藏:0      [点我收藏+]

提交了只得了60分,应该是最后的大数据样例没过

先放在博客里

 1 #include<iostream>
 2 #include<string>
 3 #include<cstring>
 4 #include<cstdio>
 5  
 6 using namespace std;
 7 char disk[1000][85000];
 8 
 9 int main()
10 {
11     int n, s, l;
12     cin >> n >> s >> l;
13     for (int i = 0; i < l; ++i)
14     {
15         int k;
16         cin >> k;
17         scanf("%s", disk[k]);
18     }
19 
20     //计算block所在的位置
21     int m;
22     cin >> m;
23     for (int i = 0; i < m; ++i)
24     {
25         int block,level,diskn,index;
26         int level_block_number = (n - 1) * s;
27         cin >> block;
28         level = block / level_block_number;
29         diskn = (n-level+(block % level_block_number) / s ) % n;
30         index = block % s;            //index为要求的block在条带中的位置
31         //在数组中找到这一段数据
32         //disp是在字符数组中的下标 
33         //读取一块的大小(4字节),也就是8个字符
34         int disp = (level * s + index) * 8;
35         //如果要读取数据的盘未损坏且长度够 
36         if (disk[diskn][disp]!= \0)
37         {
38             char tmp[9]="";
39             strncpy(tmp,disk[diskn]+disp,8);
40             printf("%s\n",tmp);
41         }
42         else if (disk[diskn][0]==\0&&disk[(diskn+1)%n][disp]!=\0&& n - 1 == l)
43         {
44             char iter[9]="";
45             int x=0,t;
46             for (int j = 0; j < n; ++j)
47             {
48                 if (j != diskn)
49                 {
50                     strncpy(iter,disk[j]+disp,8);
51                     sscanf(iter,"%x",&t);
52                     x^=t;
53                 }
54             }
55             printf("%08X\n", x);
56         }
57         else printf("-\n");
58 
59     }
60 
61     return 0;
62 }

 

ccf损坏的RAID5

原文:https://www.cnblogs.com/pan-blog/p/11362894.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!