首页 > 其他分享 >P9890 [ICPC2018 Qingdao R] Tournament 题解

P9890 [ICPC2018 Qingdao R] Tournament 题解

时间:2024-10-21 18:42:46浏览次数:1  
标签:P9890 int 题解 Tournament ICPC2018 lowbit 比赛

P9890 [ICPC2018 Qingdao R] Tournament

题目传送门

更好的阅读体验

一道找规律的思维题。

前置知识 \(lowbit\)

\(lowbit\) 是指获取一个二进制数中最右边的 \(1\) 所对应的数值。

具体地, \(lowbit\) 可以通过对一个数取反然后加 \(1\) ,再与原数进行按位与的方式来实现。

int lowbit(int x) {
	return x&-x;
}

例子:对于 \((11010)_2\) (十进制下为 \(26\) )来说,它的 \(lowbit\) 为 \((10)_2\) (十进制下为 \(2\) ),即 \(lowbit(26)=2\) 。

Solve

其实题意说得已经非常清楚了,我们可以将骑士分成二幂次组,构造打出循环赛日程表,通过找规律不难发现最多进行 \(lowbit(n)-1\) 场比赛,最后依次输出即可。

And 至于为什么最多进行 \(lowbit(n)-1\) 场比赛,我想到了一段不严格的文字证明:在比赛中,每场比赛都会消除掉一个骑士,所以在给定人数为 \(n\) 时,总的比赛次数就是将骑士数缩减为 \(1\) 的过程。最多的比赛发生在每轮都尽可能减少最少人数的情况下,即每次比赛中淘汰 \(lowbit(n)\) 个骑士。因此,总的比赛次数为 \(lowbit(n) - 1\)。

Code

#include <bits/stdc++.h>
#define N 2005

int A[N][N];
int T,n,k;

int lowbit(int x) {
	return x & -x;
}

int main() {
	A[1][1]=1;
	for(int k = 1; k < 1024; k *= 2) {
		for(int i = 1; i <= k; i++) {
			for(int j = 1; j <= k; j++) {
				A[i + k][j + k] = A[i][j];
				A[i][j + k]=A[i + k][j] = A[i][j] + k;
			}
		}
	}
	std::cin>>T;
	while(T--) {
		std::cin>>n>>k;
		if(k > lowbit(n) - 1) {
			std::cout<<"Impossible";
			puts("");
			continue;
		}
		for(int i = 2; i <= k + 1; i++) {
			for(int j = 1; j <= n; j++) {
				std::cout<<A[i][j]<<" ";
			}
			puts("");
		}
	}
	return 0;
}

over~

标签:P9890,int,题解,Tournament,ICPC2018,lowbit,比赛
From: https://www.cnblogs.com/xueruhao/p/18490020

相关文章

  • ZZJC新生训练赛第六场题解
    先给出比赛链接:下面说一下难度分层:(同一难度下按字典序排序)Easy(简单):BHMedium(中等):DEHard(困难):AGAnti-AK(防AK):CFA扣分扣分扣分!扣分!二维前缀差分板子题题目要求对二维区间加某个数或者查询二维区间的和与一维前缀和类似地,我们定义$sa[i][j]$为区间(......
  • 「题解」Codeforces Round 980 (Div. 2)
    before\(A\simD\)的题解A.ProfitableInterestRateProblemA.ProfitableInterestRateSol&Code数学题,有\(a-x\geqb-2x\),得\(x=b-a\)。特判\(a\geqb\)以及\(a<x\)的情况即可。#include<bits/stdc++.h>#defineM10001#defineN......
  • 双系统Linux使用windows硬盘导致git报错问题解决
    一.问题产生的背景双系统下ubuntu为了节省空间挂载使用了windows硬盘,在使用最新的gitclone代码后提示“gitfataldetecteddubiousownershipinrepository”,这是git为了安全原因限制登陆用户和仓库文件用户必须一致,否则提示上述错误信息二.问题的解决办法办法1:挂载磁盘时......
  • 「题解」Codeforces Round 979 (Div. 2)
    before\(A\simD\)的题解A.AGiftFromOrangutanProblemA.AGiftFromOrangutanSol&Code\(c_i-b_i\)最大就是\(a\)的最大值减最小值。将\(a\)的最大值\(x\)和最小值\(y\)放到头两位即可得到答案\((x-y)(n-1)\)。#include<bits/stdc++.h>#defineM......
  • AT_abc348_d [ABC348D] Medicines on Grid 题解
    题目传送门题目大意:给定一个\(n\timesm\)的地图,要求从起点S走到终点T,每移动\(1\)个会消耗\(1\)点能量,障碍#不能走,空地为.可以走,体力消耗至\(0\)也无法移动,地图位置\((x_i,y_i)\)有一瓶可以变成\(e_i\)体力的药,可以选择是否喝。问能否抵达终点,可以输出Yes,否......
  • AT_abc374_e [ABC374E] Sensor Optimization Dilemma 2 题解
    洛谷题目传送门AT题目传送门题目大意:给定\(n\)道工序,你有\(X\)元的资金,对于第\(i\)道工序,有两种机器供你选择,第一种机器可以花费\(P_i\)元处理\(A_i\)个产品,第二种机器可以花费\(Q_i\)元处理\(B_i\)个产品。钦定第\(i\)天处理的产品个数为\(W_i\),求在总花费......
  • UVA11294 Wedding 题解
    洛谷题目传送门前排提示:本题需要用到知识点2-SAT以及强联通分量,模板传送门P4782【模板】2-SAT。题目大意:有至多\(30\)对夫妻将会参加一个婚宴。他们将会坐在一个长桌子的两边。新郎新娘坐在彼此相对的一端并且新娘带着一个头饰使得她看不到和她坐在同一边的人。夫妻坐在......
  • SP9685 ZTC - Zombie’s Treasure Chest 题解
    洛谷题目传送门双倍经验简单题。对于空间大小为\(s1\timess2\)时,显然最多可得到的价值为\(\max(s2\timesv1,s1\timesv2)\),剩下小于\(s1\timess2\)的部分选一个占用空间大的枚举就好。时间复杂度:\(O(T\lfloor\frac{m}{\max(s1,s2)}\rfloor)\),其中\(m=n\bmo......
  • 【题解】Solution Set - NOIP2024集训Day57 字符串
    【题解】SolutionSet-NOIP2024集训Day57字符串https://www.becoder.com.cn/contest/5653「CF213E」TwoPermutations「CF961F」k-substrings「CF580E」KefaandWatch「CF504E」MishaandLCPonTree......
  • Codeforces Round 979 div2 个人题解(A~E)
    CodeforcesRound979div2个人题解(A~E)Dashboard-CodeforcesRound979(Div.2)-Codeforces火车头#define_CRT_SECURE_NO_WARNINGS1#include<algorithm>#include<array>#include<bitset>#include<cmath>#include<cstdio>#inc......