ccf損壞的RAID5


提交了只得了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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM