首页 > 其他分享 >CodeForces 1856D More Wrong

CodeForces 1856D More Wrong

时间:2023-08-06 09:01:40浏览次数:48  
标签:typedef vc int CodeForces long Wrong ask define More

洛谷传送门

CF 传送门

直接求最大值不好求。我们可以采用一个交互常见的套路,维护可能的答案集合 \(S\),每次剔除掉一些。

考虑初始把 \(a_{i - 1} < a_i > a_{i + 1}\) 的 \(i\) 加入 \(S\),每次取出 \(S\) 中差最小的一对元素 \(i, j\),那么若 \(a_i > a_j\),\(a_i\) 就大于 \([i + 1, j]\) 的所有元素,也就是 \([i, j]\) 与 \([i + 1, j]\) 的逆序对之差为 \(j - i\),此时我们删除 \(j\),否则删除 \(i\)。

使用的金币数不超过 \(n + \sum\limits_{i = 1}^n (\frac{n}{i})^2 < 2n^2 + n\),可以通过。

code
// Problem: D. More Wrong
// Contest: Codeforces - Codeforces Round 890 (Div. 2) supported by Constructor Institute
// URL: https://codeforces.com/contest/1856/problem/D
// Memory Limit: 256 MB
// Time Limit: 2000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#include <bits/stdc++.h>
#define pb emplace_back
#define fst first
#define scd second
#define mkp make_pair
#define mems(a, x) memset((a), (x), sizeof(a))

using namespace std;
typedef long long ll;
typedef double db;
typedef unsigned long long ull;
typedef long double ldb;
typedef pair<ll, ll> pii;

const int maxn = 2020;

int n, a[maxn];

inline int ask(int l, int r) {
	printf("? %d %d\n", l, r);
	fflush(stdout);
	int x;
	scanf("%d", &x);
	if (x == -1) {
		exit(0);
	}
	return x;
}

void solve() {
	scanf("%d", &n);
	for (int i = 1; i < n; ++i) {
		a[i] = ask(i, i + 1);
	}
	vector<int> vc;
	for (int i = 1; i <= n; ++i) {
		bool flag = 1;
		if (i > 1 && a[i - 1]) {
			flag = 0;
		}
		if (i < n && !a[i]) {
			flag = 0;
		}
		if (flag) {
			vc.pb(i);
		}
	}
	while ((int)vc.size() > 1) {
		int mn = 1e9, p = -1;
		for (int i = 0; i < (int)vc.size() - 1; ++i) {
			int x = vc[i], y = vc[i + 1];
			if (y - x < mn) {
				mn = y - x;
				p = i;
			}
		}
		int x = vc[p], y = vc[p + 1];
		if (ask(x, y) == ask(x + 1, y) + y - x) {
			vc.erase(vc.begin() + p + 1);
		} else {
			vc.erase(vc.begin() + p);
		}
	}
	printf("! %d\n", vc[0]);
	fflush(stdout);
}

int main() {
	int T = 1;
	scanf("%d", &T);
	while (T--) {
		solve();
	}
	return 0;
}

标签:typedef,vc,int,CodeForces,long,Wrong,ask,define,More
From: https://www.cnblogs.com/zltzlt-blog/p/17609046.html

相关文章

  • Codeforces Round 882 (Div. 2)
    CodeforcesRound882(Div.2)ATheManwhobecameaGod给定一个数组\(\{x_1,x_2,\cdots,x_n\}\)和一个整数\(k\),记\(f(l,r)=\sum_{i=0}^{i\ler-l}|x_{l+i}-x_{l+i+1}|\),求将数组划分为\(k\)个部分的划分方案,使得对每个部分的\(f(l,r)\)之和最小.​ 将两数相......
  • Codeforces Round 885 (Div. 2) C. Vika and Price Tags
    C.VikaandPriceTagsC-VikaandPriceTags题意:​ 初始两串数列\(a,b\),对于第\(i\)个数,令\(c_i=|a_i-b_i|\),然后将数列\(a=b,b=c\)。重复这样的操作,问是否可能让\(a\)串全部变成0。思路:这题实际上之前已经发过,但最近打牛客对这题有了新的理解,所以来记录一下。​ ......
  • Codeforces 1843D:Apple Tree
    1843D.AppleTreeDescription:一棵树(\(Tree\)无环无重边)\(n\)个节点,根节点为1(节点编号\(1\)~\(n\)),树上只有2个苹果,每次摇动苹果树时,每个苹果会有如下变化:当前苹果位于节点\(u\):1.若节点\(u\)有子节点,则该苹果移动到此节点(若有多个子节点,则可以到任意一个)。2.......
  • Educational Codeforces Round 151
    EducationalCodeforcesRound151T1就是大水题但写了很长时间。构造题。首先分类讨论:当\(x\ne1\)时我们构造的序列长度就为\(n\),序列就是\(n\)个\(1\)。当\(x=1\)时,当\(n\)为偶数,我们就枚举\(1\simk\)且\(i\nex\),只要\(n\)能整除\(i\),长度为\(......
  • Practice on Codeforces and Atcoder in August
    EducationalCodeforcesRound151A~ECodeforcesRound#879Div.2CodeforcesRound#882Div.2CodeforcesRound#873Div.2......
  • Educational Codeforces Round 151 (Rated for Div. 2) 题解
    A.ForbiddenInteger显然,当\(x\not=1\)时,直接输出\(n\)个\(1\)即可否则,如果\(n\)为奇数,那就输出\(\lfloor\frac{n}{2}\rfloor-1\)个\(2\)和\(3\);如果\(n\)为偶数,那就输出\(\frac{n}{2}\)个\(2\)(要看一下\(k\)的大小)B.ComeTogether因为Bob和Carol都......
  • Codeforces Round 882 (Div. 2)
    link题号:CF1847A~FA题意:给定一个数组\(\{x_1,x_2,\cdots,x_n\}\)和一个整数\(k\),记\(f(l,r)=\sum_{i=0}^{i<r-l}|x_{l+i}-x_{l+i+1}|\),求将数组划分为\(k\)个部分的划分方案,使得对每个部分的\(f(l,r)\)之和最小.题解:简单题,首先我们注意到,如果将\(l,l+1\)隔开,那......
  • Codeforces Round 424 (Div. 1)D. Singer House
    传送门显然要自底向上进行\(dp\)深度相同的子树结构相同所以可以利用深度来代表子树。那么就应该统计出有向路径的个数。考虑路径由链所拼成。那么状态里应该有有向链的条数。设\(f_{i,j}\)表示深度为\(i\)链条数为\(j\)的方案数。不选当前的节点则\(f_{i,j}=f_{i+1,k}\cdot......
  • Codeforces 1855B:Longest Divisors Interval 最长的连续约数区间
    1855B.LongestDivisorsIntervalDescription:对于一个整数\(n\)\((1\leqn\leq10^{18})\),找到一段最长的区间\([l,r]\),使得区间内所有数均为\(n\)的约数。Analysis:如果\(n\)是一个奇数(非\(2\)的倍数),由于\(odd=odd\timesodd\),则不可能有连续的两个整数均为......
  • Codeforces Round 449 (Div. 1) D. Nephren Runs a Cinema 卡特兰数
    luogu链接题意不再赘述。优先枚举的应该是\(VIP\)用户,枚举范围应该是\([0,n-l]\)之后总客户数为\(s=n-i\)再考虑枚举\(100\)的总人数为\(x\)则要求\(s-2x\in[l,r]\)这部分方案数应该为从\((0,0)\)到达\((s-x,x)\)且不越过\(y=x\)的方案数。利用折线法求出方案数为\(C(s,x)......