zoukankan      html  css  js  c++  java
  • Codeforces Round #443 (Div. 1) D. Magic Breeding 位运算

    D. Magic Breeding

    http://codeforces.com/contest/878/problem/D

    description

    Nikita and Sasha play a computer game where you have to breed some magical creatures. Initially, they have k creatures 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 n, k 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 ti, xi 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

    2 2 4
    1 2
    2 1
    1 1 2
    2 1 2
    3 3 1
    3 4 2

    output

    2
    1

    input

    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

    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个属性是多少。

    题解

    对于每个属性而言,就k种情况。
    考虑最简单的情况,属性只有0和1。那么我们暴力可以用一个数字来表示怪兽的每个属性的取值。
    取最大就是取|,最小就是取&,然后最后看是0是1即可。

    但是现在属性是1e9范围的,我们也可以这样做,我们用1表示这个位置的属性至少为这么大。
    然后和之前一样做,最后输出最大的合法属性即可。

    代码

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn = 1e6+7;
    bitset<4096>S[maxn];
    int a[12][maxn];
    int n,k,q,tot;
    int main(){
        scanf("%d%d%d",&n,&k,&q);
        tot=k;
        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]);
            }
        }
        for(int qq=0;qq<q;qq++){
            int op,x,y;
            scanf("%d%d%d",&op,&x,&y);
            x--,y--;
            if(op==1)S[tot++]=S[x]&S[y];
            if(op==2)S[tot++]=S[x]|S[y];
            if(op==3){
                vector<pair<int,int> >Q;
                for(int i=0;i<k;i++){
                    Q.push_back(make_pair(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;
                    }
                }
            }
        }
    }
  • 相关阅读:
    ABP PUT、DELETE请求错误405.0
    Visual Studio Code 通过 Chrome插件Type Script断点调试Angular 2
    Angular 报错 Can't bind to 'formGroup' since it isn't a known property of 'form'
    ABP 用swagger UI测试API报401无权限访问问题
    ABP .Net Core API和Angular前端APP集成部署
    ABP .Net Core API和Angular前端APP独立部署跨域问题(No Access-Control-Allow-Origin)
    Hosts文件实际应用 配置内部服务器提高访问效率和速度
    mysql-proxy实现读写分离
    mysql主从复制-linux版本
    nginx作反向代理,实现负载均衡
  • 原文地址:https://www.cnblogs.com/qscqesze/p/7763785.html
Copyright © 2011-2022 走看看