• 试题编号: 201903-3 试题名称: 损坏的RAID5


    这题的数据未免也太水了,题目的意思好像默认是每块磁盘装载数据的长度是相等的。我写了判断每次取数据是否会超过每块磁盘存的数据的长度,然而并没有什么卵用。交上去20分,写了个数据测了下,如果要求的块太大的话,这样下面计算得出的对应磁盘号会太大,然后就会runtime error,所以求出最大块号,如果查询的块超过最大块号,就输出错误就可以了。

    #include <bits/stdc++.h>
    using namespace std;
    
    int N,S,L,M;
    
    long long number(char c)
    {
        if (c>='0'&&c<='9') {
            return c-'0';
        }
        else {
            return 10+c-'A';
        }
    }
    
    long long getNum(string s)
    {
        return number(s[0])*(long long)16+number(s[1]);
    }
    
    int main()
    {
      //  freopen("in.txt","r",stdin);
    
        ios::sync_with_stdio(false);
    
    //    string s;
    //    cin>>s;
    //    cout<<getNum(s)<<endl;;
    
        cin>>N>>S>>L;
    
    
        string disk[N];
        int num;
        int len;
        for (int i=0;i<L;i++) {
            cin>>num;
            cin>>disk[num];
            len=disk[num].length();
    //        cout<<disk[num]<<endl;
        }
    
        int maxid=len/8*(N-1);
    
        N--;
    
        cin>>M;
        int query;
        for (int i=0;i<M;i++) {
            cin>>query;
    
            if (query<0||query>=maxid) {
                cout<<'-'<<endl;
                continue;
            }
            int floor=query/(N*S);
            int rem=query-floor*S*N;
            int mod=rem%S;
            int beg=floor*8*S+mod*8;
    
            int rescnt=rem/S+1;
            int resbeg=N-floor%(N+1);
            int resdisk=(resbeg+rescnt)%(N+1);
    
            if (disk[resdisk]=="") {
    
                if (L<N) {
                    cout<<'-'<<endl;
                    continue;
                }
    
                long long ans[10];
                memset(ans,0,sizeof(ans));
    
                bool flag=false;
                for (int i=0;i<=N;i++) {
                    if (i!=resdisk) {
                        if (beg+8>disk[i].length()) {
                            flag=true;
                            break;
                        }
                        for (int j=0;j<4;j++) {
                            ans[j]=ans[j]^getNum(disk[i].substr(beg+j*2,2));
                        }
                    }
                }
    
                if (flag) {
                    cout<<'-'<<endl;
                    continue;
                }
    
                for (int j=0;j<4;j++) {
    //                printf("%02X",ans[j]);
                    cout<<setiosflags(ios::uppercase)<<hex<<ans[j];
                }
                cout<<endl;
    //            puts("");
    
            }
            else {
                string s=disk[resdisk].substr(beg,8);
                if (beg+8>disk[resdisk].length()) {
                    cout<<'-'<<endl;
                    continue;
                }
                cout<<s<<endl;
            }
    
        }
        return 0;
    }
    /**<
    
    00010203
    00010203
    04050607
    24252627
    
    Process returned 0 (0x0)   execution time : 0.239 s
    Press any key to continue.
    
    3 2 2
    0 000102030405060710111213141516172021222324252627
    1 A0A1A2A3A4A5A6A7B0B1B2B3B4B5B6B7C0C1C2C3C4C5C6C7
    2
    2
    5
    
    2 1 2
    0 000102030405060710111213141516172021222324252627
    1 000102030405060710111213141516172021222324252627
    2
    0
    1
    */
    
    
    11 2 10
    0 0001020304050607101112131415161720212223242526273031323334353637404142434445464750515253545556576061626364656667707172737475767780818283848586879091929394959697
    1 0001020304050607101112131415161720212223242526273031323334353637404142434445464750515253545556576061626364656667707172737475767780818283848586879091929394959697
    2 0001020304050607101112131415161720212223242526273031323334353637404142434445464750515253545556576061626364656667707172737475767780818283848586879091929394959697
    3 0001020304050607101112131415161720212223242526273031323334353637404142434445464750515253545556576061626364656667707172737475767780818283848586879091929394959697
    4 0001020304050607101112131415161720212223242526273031323334353637404142434445464750515253545556576061626364656667707172737475767780818283848586879091929394959697
    5 0001020304050607101112131415161720212223242526273031323334353637404142434445464750515253545556576061626364656667707172737475767780818283848586879091929394959697
    6 0001020304050607101112131415161720212223242526273031323334353637404142434445464750515253545556576061626364656667707172737475767780818283848586879091929394959697
    7 0001020304050607101112131415161720212223242526273031323334353637404142434445464750515253545556576061626364656667707172737475767780818283848586879091929394959697
    8 0001020304050607101112131415161720212223242526273031323334353637404142434445464750515253545556576061626364656667707172737475767780818283848586879091929394959697
    9 0001020304050607101112131415161720212223242526273031323334353637404142434445464750515253545556576061626364656667707172737475767780818283848586879091929394959697
    4
    -1
    10
    15
    1000
    
  • 相关阅读:
    Google 推出开源博客迁移工具
    Google 的盲人科学家 T. V. RAMAN
    Sun收购Qlayer以积极推动云计算业务
    比尔盖茨:云计算再造软件边界
    一些CodeGuru的COM教程 (英文)
    机器人:人工智能与心理学的较量
    100个最古老互联网域名 最久只有23年(附名单)
    spring2 hibernate3 中包冲突问题解决
    spring2.5+struts2+hibernate+mysql
    [转].NET破解体验 ildasm.exe的使用
  • 原文地址:https://www.cnblogs.com/xyqxyq/p/12328856.html
Copyright © 2020-2023  润新知