zoukankan      html  css  js  c++  java
  • [LOJ3242] Sob

    Description

    给定两个整数 (n)(m)(n+m le 10^6),将 ({ 0,1,2,...,n-1 })({ m,m+1,...,m+n-1 }) 一一匹配成 (n) 对数,对于每对匹配的 (x in A)(y in B),都要满足 (x subseteq y)。容易证明这样的解一定存在。

    Solution

    对于集合 (A) 中的数,我们从大到小考虑,每个数找到一个最小的与它匹配的,那么往下的一段一定可以与它下面的数匹配,并且会占用掉所有小于该数的数……这样说好像有点抽象,来一张图感受一下

    #include <bits/stdc++.h>
    using namespace std;
    
    #define int long long 
    const int N = 1000005;
    
    int n,m;
    
    signed main()
    {
        ios::sync_with_stdio(false);
    
        cin>>n>>m;
        while(n)
        {
            int x=n-1,y=m;
            while((x&y)!=x) ++y;
            for(int i=y;i>=m;--i,--x) cout<<x<<" "<<i<<endl;
            n=x+1; m=y+1;
        }
    
        system("pause");
    }
    
  • 相关阅读:
    Swap Nodes in Pairs
    Permutations(copy)
    Sort Colors
    Merge Two Sorted Lists
    Implement Queue using Stacks
    Best Time to Buy and Sell Stock
    Happy Number
    Gray Code
    springMVC初次搭建,产生错误
    JSP常用指令
  • 原文地址:https://www.cnblogs.com/mollnn/p/13741702.html
Copyright © 2011-2022 走看看