首页 > 其他分享 >A. And Matching

A. And Matching

时间:2024-07-01 22:41:55浏览次数:17  
标签:cout int cin ++ 11111 include Matching

链接:https://codeforces.com/problemset/problem/1630/A
题目:

思路:
1.首先k=0时很显然所有的pair为:{i,n-i}
2.k<n-1时所有的pair为{0,n-k-1},{k,n-1},{i,n-i}可以结合位运算的性质来看
3.k=n-1的时候,当n=4或2时显然没有。
当n>4时可以如下分析:首先需要合成的是11111(举例)
考虑如下组合:{00000,11111},{10000,11110},{01000,11101},{00100,10111},{00010,11011},{00001,01111}就是互补,然后剩下的按照k=0的排法排,这样就不会影响11111的合成。
怎么考虑位数?就用这一段:

for (int i = 1; i < n - 1; i++)
{
	int nums = 0;
	int x = 1;
	while (x < n)
	{
		nums += (x & i)?1:0;
		x <<= 1;
	}
	id[nums].push_back(i);
}

然后需要注意的是中间的数要移位,否则会出现{00100,11011}的情况。
代码

#define _CRT_SECURE_NO_WARNINGS 
#include<iostream>
#include<vector>
#include<algorithm>
#include<math.h>
#include<sstream>
#include<string>
#include<string.h>
#include<iomanip>
#include<stdlib.h>
#include<map>
#include<queue>
#include<limits.h>
#include<climits>
#include<fstream>
#include<stack>
#define IOS ios::sync_with_stdio(false), cin.tie(0) ,cout.tie(0)
using namespace std;
typedef long long ll;
const int N = 20;
vector<int>id[N];
int main()
{
	IOS;
	int t; cin >> t;
	while (t--)
	{
		vector<int>a;
		for (int i = 0; i < N; i++)id[i] = a;
		ll n, k; cin >> n >> k;
		if (k == n - 1) 
		{
			if(n == 2 or n == 4)
				cout << -1 <<'\n';
			else
			{
				cout << 0 << ' ' << n - 1<< '\n';
				for (int i = 1; i < n - 1; i++)
				{
					int nums = 0;
					int x = 1;
					while (x < n)
					{
						nums += (x & i)?1:0;
						x <<= 1;
					}
					id[nums].push_back(i);
				}
				int size = log2(n);
				if (id[1].size() % 2)swap(id[1][id[1].size() / 2], id[1][id[1].size() / 2 + 1]);
				for (int u = 0; u < id[1].size(); u++)
					cout << id[1][u] << ' ' << id[size - 1][u] << '\n';
				for (int i = 2; i < size - i; i++)
					for (int u : id[i])
						cout << u << ' ' << n - 1 - u << '\n';
				if (size % 2 == 0)
				{
					for (int u : id[size / 2])
						if (u > n - 1 - u)break;
						else cout << u << ' ' << n - 1 - u << '\n';
				}
			}
		}
		else if (k == 0) { for (int i = 0; n - i > i; i++)cout << i << ' ' << n - i - 1  << '\n'; }
		else
		{
			ll a = n - k - 1;
			cout << 0 << ' ' << a << '\n' << n - 1 << ' ' << k << '\n';
			for (int i = 1; n - i > i; i++)
			{
				if (i != k and i != n - k - 1)
					cout << i << ' ' << n - i - 1<< '\n';
			}
		}
	}

	return 0;
}

标签:cout,int,cin,++,11111,include,Matching
From: https://www.cnblogs.com/zzzsacmblog/p/18278985

相关文章

  • [ABC126F] XOR Matching 题解
    很好的构造题。题意请构造一个长度为$2^{m+1}$的序列$a$,该序列满足:$\foralli\in[1,2^{m+1}],a_i\in[0,2^m-1]$且每个数都恰好出现两次。对于任意一对$(i,j)$满足$a_i=a_j$,$a_i\oplusa_{i+1}\oplus\cdots\oplusa_{j-1}\oplusa_j=k$。$\oplus$表......
  • CF1651E Sum of Matchings
    标签:图论鱼鱼蒸题。原图由若干个偶环组成,那么对于每个环分别计算贡献,枚举环上的一段区间,然后算出要能包含这一段的\(l,r,L,R\)的对应的最小区间,然后又不能包含这段区间左右的点,所以要去掉一部分,然后乘起来再乘上区间长度的一半即可。优美的代码实现。#include<bits/stdc++.......
  • CF1630A And Matching 题解
    题目描述有\(n\)个数\(0,1,2,\cdots,n-1\)。你需要把他们两两分组,使得每组两个数按位与的结果之和\(=k\)。如果可能,请构造出一组可能的\(\fracn2\)个数对,否则输出-1。保证\(n\)是\(2\)的幂,\(k\len-1\)思路首先我们发现,\(n\)是二的幂,所以按照二进制的角度看,这......
  • C. Matching Arrays
    链接:https://codeforces.com/problemset/problem/1896/C洛谷:https://www.luogu.com.cn/problem/CF1896C这题疑似有点水了?为什么还有绿题hhhh思路:结构体+排序首先对a,b各自排序:取b的下x和a的上x比较,如果可以(指ai>bi),那么进入二阶段;如果不行,那么直接输出no。二阶段:取b的上n-x和a的......
  • Codeforces 954I Yet Another String Matching Problem
    考虑到这个答案怎么算。能发现相当于是对应的字符间相连边,那么一个连通块中的字符就要变成同一个字符。于是一个连通块的代价就是\(sz-1\)。所以令有\(x\)个连通块,最后的代价就是\(|\Sigma|-x\)。考虑到因为\(|\Sigma|=6\),而\(B_6=203\)(贝尔数,\(B_n\)意义为大......
  • ERROR: No matching distribution found for pymcubes
    (pytorch3drecgan)ubuntu@ubuntu:~/lcx/3D-RecGAN-pytorch-masterv3$pipinstallpymcubesWARNING:Keyringisskippedduetoanexception:Failedtounlockthecollection!WARNING:Retrying(Retry(total=4,connect=None,read=None,redirect=None,status=None))......
  • [20240325]FORCE_MATCHING_SIGNATURE与DML.txt
    [20240325]FORCE_MATCHING_SIGNATURE与DML.txt--//生产系统遇到1个FORCE_MATCHING_SIGNATURE重合的奇怪现象,一般情况都是相似的sql语句(没有使用绑定变量的sql语句),--//FORCE_MATCHING_SIGNATURE相同。--//实际上insert语句真实FORCE_MATCHING_SIGNATURE=0,但是在v$active_session......
  • [20240321]分析FORCE_MATCHING_SIGNATURE重合的奇怪情况.txt
    [20240321]分析FORCE_MATCHING_SIGNATURE重合的奇怪情况.txt--//生产系统遇到1个FORCE_MATCHING_SIGNATURE重合的奇怪现象,一般情况都是相似的sql语句(没有使用绑定变量的sql语句),--//FORCE_MATCHING_SIGNATURE相同。--//注:11g之前如果绑定变量与常量混合,会出现EXACT_MATCHING_SIGN......
  • 题解 CF1948G【MST with Matching】
    非常精彩的转化!显然,树是二分图。由König定理,我们知道:二分图最小点覆盖等于最大匹配。因此枚举点覆盖\(S\),则一条边\((u,v)\)可以被选择,当且仅当\(u\inS\lorv\inS\),在所有可以选择的边上跑最小生成树即可。我采用的是Kruskal算法,时间复杂度为\(O(2^nn^2\logn)\),可......
  • CF1896C Matching Arrays 题解
    题目简述给定两个长度为$n$的数列$a,b$,再给定一个数$x$,请你判断是否存在一种重排$b$数列的方式,使得满足$a_i>b_i$的$i$恰好有$x$个。$n\leq2\times10^5$。题目分析遇到这种可行性问题,首先考虑做出最优解,以此来判断是否无解。接下来,可以思考最优解如何构造,我们......