zoukankan      html  css  js  c++  java
  • 18.5.12 c++选做题#4

    4:自己实现bitset

    描述程序

    填空,实现一个类似STL bitset的 MyBitset, 输出指定结果

    #include <iostream>
    #include <cstring>
    using namespace std;
    template <int bitNum>
    struct MyBitset 
    {
        char a[bitNum/8+1];
        MyBitset() { memset(a,0,sizeof(a));};
        void Set(int i,int v) {
            char & c = a[i/8];
            int bp = i % 8;
            if( v ) 
                c |= (1 << bp);
            else 
                c &= ~(1 << bp);
        }
    // 在此处补充你的代码
    void Print() {
            for(int i = 0;i < bitNum; ++i) 
                cout << (*this) [i];
            cout << endl;
        }
    
    };
    
    int main()
    {
        int n;
        int i,j,k,v;
        while( cin >>  n) {
            MyBitset<20> bs;
            for(int i = 0;i < n; ++i) {
                int t;
                cin >> t;
                bs.Set(t,1);
            }
            bs.Print();
            cin >> i >> j >> k >> v;
            bs[k] = v;
            bs[i] = bs[j] = bs[k];
            bs.Print();
            cin >> i >> j >> k >> v;
            bs[k] = v;
            (bs[i] = bs[j]) = bs[k];
            bs.Print();
        }
        return 0;
    }

    输入

    多组数据
    每组数据:
    第一行是整数 n , 1 <= n < 20;
    第二行是n个整数 k1,k2... kn,均在范围 [0,19]内。 
    第三行是 四个整数 i1,j1,k1,v1 。 0 <= i1,j1,k1 <= 19, v1值为0或1
    第三行是 四个整数 i2,j2,k2,v2 。 0 <= i2,j2,k2 <= 19, v2值为0或1

    输出

    对每组数据,共输出3行,每行20位,每位为1或者0。最左边称为第0位 
    第一行: 第 k1,k2 ... kn位为1,其余位为0。 
    第二行: 将第一行中的第 i1,j1,k1位变为 v1,其余位不变
    第三行: 将第二行中的第i2位和k2位变为v2,其余位不变样例输入

    4
    0 1 2 8
    7 19 0 1
    7 2 8 0
    1
    1
    1 1 1 0
    1 1 1 1
    

    样例输出

    11100000100000000000
    11100001100000000001
    11100000000000000001
    01000000000000000000
    00000000000000000000
    01000000000000000000
    

    提示推荐使用内部类,内部类中使用引用成员。引用成员要在构造函数中初始化。

    来源

    Guo Wei

     1 #include <iostream>
     2 #include <cstring>
     3 using namespace std;
     4 template <int bitNum>
     5 struct MyBitset
     6 {
     7     char a[bitNum / 8 + 1];
     8     MyBitset() { memset(a, 0, sizeof(a)); };
     9     void Set(int i, int v) {
    10         char & c = a[i / 8];
    11         int bp = i % 8;
    12         if (v)
    13             c |= (1 << bp);
    14         else
    15             c &= ~(1 << bp);
    16     }
    17     // 在此处补充你的代码
    18     class bsp {
    19     public:
    20         int hext[20], flag;
    21         bsp() { flag = 0; 
    22         memset(hext, 0, sizeof(int) * 20);
    23         }
    24         int&operator()(int x,MyBitset&k) {
    25             if (!flag) {
    26                 for (int i = 0; i <= bitNum / 8 + 1; i++) {
    27                     int l = k.a[i]; int c = 8*i;
    28                     while (l > 0) {
    29                         if(l%2)
    30                             hext[c]++;
    31                         c++;
    32                         l/= 2;
    33                     }
    34                 }
    35                 flag = 1;
    36             }
    37             return hext[x];
    38         }
    39     };
    40     bsp b;
    41     int&operator[](int x) {
    42         return b(x,*this);
    43     }
    44     //code ends
    45     void Print() {
    46         for (int i = 0; i < bitNum; ++i)
    47             cout << (*this)[i];
    48         cout << endl;
    49     }
    50 
    51 };
    52 
    53 int main()
    54 {
    55     int n;
    56     int i, j, k, v;
    57     while (cin >> n) {
    58         MyBitset<20> bs;
    59         for (int i = 0; i < n; ++i) {
    60             int t;
    61             cin >> t;
    62             bs.Set(t, 1);
    63         }
    64         bs.Print();
    65         cin >> i >> j >> k >> v;
    66         bs[k] = v;
    67         bs[i] = bs[j] = bs[k];
    68         bs.Print();
    69         cin >> i >> j >> k >> v;
    70         bs[k] = v;
    71         (bs[i] = bs[j]) = bs[k];
    72         bs.Print();
    73     }
    74     return 0;
    75 }
    View Code

    被比赛突然结束所支配的恐惧……

    (为什么还有限时啊我还以为起码会到考试之前都开的)

    (至少开到12点啊我还能再抢救一下啊)

    (没做完好不爽啊!!)

    不管对不对先存在这吧 没准下次又开了呢(冷静分析)

    注定失败的战争,也要拼尽全力去打赢它; 就算输,也要输得足够漂亮。
  • 相关阅读:
    hdu 4521 小明系列问题——小明序列(线段树 or DP)
    hdu 1115 Lifting the Stone
    hdu 5476 Explore Track of Point(2015上海网络赛)
    Codeforces 527C Glass Carving
    hdu 4414 Finding crosses
    LA 5135 Mining Your Own Business
    uva 11324 The Largest Clique
    hdu 4288 Coder
    PowerShell随笔3 ---别名
    PowerShell随笔2---初始命令
  • 原文地址:https://www.cnblogs.com/yalphait/p/9030625.html
Copyright © 2011-2022 走看看