zoukankan      html  css  js  c++  java
  • CF878D D. Magic Breeding bitset

    D. Magic Breeding
    time limit per test
    4 seconds
    memory limit per test
    1024 megabytes
    input
    standard input
    output
    standard output

    Nikita and Sasha play a computer game where you have to breed some magical creatures. Initially, they have kcreatures numbered from 1 to k. Creatures have n different characteristics.

    Sasha has a spell that allows to create a new creature from two given creatures. Each of its characteristics will be equal to the maximum of the corresponding characteristics of used creatures. Nikita has a similar spell, but in his spell, each characteristic of the new creature is equal to the minimum of the corresponding characteristics of used creatures. A new creature gets the smallest unused number.

    They use their spells and are interested in some characteristics of their new creatures. Help them find out these characteristics.

    Input

    The first line contains integers nk and q (1 ≤ n ≤ 105, 1 ≤ k ≤ 12, 1 ≤ q ≤ 105) — number of characteristics, creatures and queries.

    Next k lines describe original creatures. The line i contains n numbers ai1, ai2, ..., ain (1 ≤ aij ≤ 109) — characteristics of the i-th creature.

    Each of the next q lines contains a query. The i-th of these lines contains numbers tixi and yi (1 ≤ ti ≤ 3). They denote a query:

    • ti = 1 means that Sasha used his spell to the creatures xi and yi.
    • ti = 2 means that Nikita used his spell to the creatures xi and yi.
    • ti = 3 means that they want to know the yi-th characteristic of the xi-th creature. In this case 1 ≤ yi ≤ n.

    It's guaranteed that all creatures' numbers are valid, that means that they are created before any of the queries involving them.

    Output

    For each query with ti = 3 output the corresponding characteristic.

    Examples
    input
    Copy
    2 2 4
    1 2
    2 1
    1 1 2
    2 1 2
    3 3 1
    3 4 2
    output
    Copy
    2
    1
    input
    Copy
    5 3 8
    1 2 3 4 5
    5 1 2 3 4
    4 5 1 2 3
    1 1 2
    1 2 3
    2 4 5
    3 6 1
    3 6 2
    3 6 3
    3 6 4
    3 6 5
    output
    Copy
    5
    2
    2
    3
    4
    Note

    In the first sample, Sasha makes a creature with number 3 and characteristics (2, 2). Nikita makes a creature with number 4 and characteristics (1, 1). After that they find out the first characteristic for the creature 3 and the second characteristic for the creature 4.

    题目还是很好懂的吧

    一开始的时候,给你k个怪兽,每个怪兽有n个属性。
    然后现在你有三个操作:
    第一个操作是用x和y怪物生成一个新的怪物,这个怪物的属性是x和y的最大值
    第二个操作是用x和y怪物生成一个新的怪物,这个怪物的属性是x和y的最小值
    第三个操作是询问第x个怪物的第y个属性是多少。

    用并查集维护?不太行啊,这么多操作呢,根本无法模拟

    这个bitset很有灵性

    &用来取大,|用来取小

    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e6+5;
    bitset<4096>S[N];
    int a[12][N];
    int n,k,q;
    int main()
    {
        scanf("%d%d%d",&n,&k,&q);
        for(int i=0; i<k; i++)
        {
            for(int j=0; j<4096; j++)
                if(j&(1<<i))S[i].set(j);
            for(int j=0; j<n; j++)scanf("%d",&a[i][j]);
        }
        int tot=k;
        while(q--)
        {
            int op,x,y;
            scanf("%d%d%d",&op,&x,&y),x--,y--;
            if(op==1)S[tot++]=S[x]&S[y];
            else if(op==2)S[tot++]=S[x]|S[y];
            else
            {
                vector<pair<int,int> >Q;
                for(int i=0; i<k; i++)Q.push_back({a[i][y],i});
                sort(Q.begin(),Q.end());
                int b = 0;
                for(int i=0; i<k; i++)
                {
                    b|=1<<Q[i].second;
                    if(S[x][b])
                    {
                        cout<<Q[i].first<<endl;
                        break;
                    }
                }
            }
        }
    }
  • 相关阅读:
    RabbitMQ和Kafka的区别
    如何在 Vim 中复制,剪切,粘贴
    python中的堆支持自定义的比较函数
    LLDP协议(笔记草稿)
    You may have an infinite update loop in a component render function,vue模板报错
    修改element ui样式,el-dialog__header样式,并且不影响全局
    js,小数字符串去除右边零显示
    egg-sequelize创建表
    Cyclic dependency found. Users is dependent of itself,mysql表循环依赖问题
    eggjs sequelize操作多个数据,表名不加s,不默认加创建和修改时间字段
  • 原文地址:https://www.cnblogs.com/BobHuang/p/9630562.html
Copyright © 2011-2022 走看看