首页 > 其他分享 >Codeforces Round #803 (Div. 2)

Codeforces Round #803 (Div. 2)

时间:2023-01-20 23:55:58浏览次数:50  
标签:return NO int Codeforces long 803 Div define

题目链接

A

水题

// Problem: A. XOR Mixup
// Contest: Codeforces - Codeforces Round #803 (Div. 2)
// URL: https://codeforces.com/contest/1698/problem/A?mobile=true
// Memory Limit: 256 MB
// Time Limit: 1000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#define _CRT_SECURE_NO_WARNINGS
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
#define IOS std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define NO {puts("NO") ; return ;}
#define YES {puts("YES") ; return ;}
#define endl "\n"
#define int long long 


const int N=1e3+10;

int a[N];

void solve()
{
	int n;
	cin>>n;
	for(int i=1;i<=n;i++)
	cin>>a[i];
	sort(a+1,a+1+n);
	cout<<a[(n+1)/2]<<endl;
	return;
	
	
	
}

signed main()
{
int T;
cin>>T;
while(T--)
{
	solve();
}
}

B

核心思路

分析当我们想要使一个堆变为"tall"该怎么办呢,我们可以通过模拟发现当我们的k大于2的时候是不可能把这个堆变为"tall".只有k=1的时候才有可能。

// Problem: B. Rising Sand
// Contest: Codeforces - Codeforces Round #803 (Div. 2)
// URL: https://codeforces.com/contest/1698/problem/B
// Memory Limit: 256 MB
// Time Limit: 1000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#define _CRT_SECURE_NO_WARNINGS
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
#define IOS std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define NO {puts("NO") ; return ;}
#define YES {puts("YES") ; return ;}
#define endl "\n"
#define int long long 


const int N=1e6+10;

int a[N];

void solve()
{
	int n,k;
	cin>>n>>k;
	for(int i=1;i<=n;i++)
	cin>>a[i];
	if(k==1)
	{
		if(n%2)
		cout<<n/2<<endl;
		else
		cout<<n/2-1<<endl;
	}
	else
	{
		int cnt=0;
		for(int i=2;i<=n-1;i++)
		{
			if(a[i]>a[i-1]+a[i+1])
			cnt++;
		}
		cout<<cnt<<endl;
	}
}

signed main()
{
int T;
cin>>T;
while(T--)
{
	solve();
}

return 0;
}

C

核心思路

照样使那个思路,想考虑特殊点或者使先从很小的一个方面入手,看可不可以分析出来相关性质。

首先我们可以考虑0这个特殊的点。

  1. 1 0 0 0.....这个只包含一个正整数或者是负数,其他都是0的肯定是可行的。
  2. 1 -1 0 0 0....这种由x和-x组成的肯定也是可以的。
  3. 我们可以思考如果由三个正整数或者是三个负整数可以吗,答案是显然不可以的,因为不可能有数可以等于三个正整数的和,假设存在x=i+j+k,那么x+j+k又有谁可以和他们划等号呢。

当我们把这个性质分析出来了,时间复杂度就是O(1)的了,因为最多也就只有5个数了,也就是2个正数和2个负数还有个0.

// Problem: C. 3SUM Closure
// Contest: Codeforces - Codeforces Round #803 (Div. 2)
// URL: https://codeforces.com/contest/1698/problem/C
// Memory Limit: 256 MB
// Time Limit: 1000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#define _CRT_SECURE_NO_WARNINGS
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
#define IOS std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define NO {puts("NO") ; return ;}
#define YES {puts("YES") ; return ;}
#define endl "\n"
#define int long long 

int n;

const int N=1e6+10;

int a[N];
int erfen(int x)
{
	int l=1;
	int r=n;
	while(l<r)
	{
		int mid=l+r>>1;
		if(a[mid]>=x)
		r=mid;
		else
		l=mid+1;
	}
	return l;
}

void solve()
{
	cin>>n;
	
	int flag=1,cnt0=0,cnt1=0,cnt2=0;
	unordered_map<int ,int> mp;
	vector<int> b;
	for(int i=0;i<n;i++)
	{
		cin>>a[i];
		mp[a[i]]++;
	}
	for(int i=0;i<n;i++)
	{
		if(a[i]==0)
		{
			cnt0++;
		}
		else if(a[i]>0)
		{
			cnt1++;
			b.push_back(a[i]);
		}
		else
		{
			cnt2++;
			b.push_back(a[i]);
		}
	}
	if(cnt1>2||cnt2>2)
	{
		NO;
	}	
	if(cnt0)
	b.push_back(0);
	int l=b.size();
	for(int i=0;i<l;i++)
	{
		for(int j=i+1;j<l;j++)
		{
			for(int k=j+1;k<l;k++)
			{
				if(mp[b[i]+b[j]+b[k]]==0)
				{
					flag=0;
				}
			}
		}
	}
	if(flag)
	{
		YES;
	}
	else
	{
		NO;
	}
	
	
}

signed main()
{
	
	int T;
	cin>>T;
	while(T--)
	{
		solve();
	}

}

D

核心思路

首先根据数据范围知道这个肯定是二分。

然后分析样例来挖掘性质

样例: 4 2 1 3 5
实际: 1 2 3 4 5
我们分析区间[3,5],我们发现如果是在区间里面的数交换那么我们次数一定成对增加。
也就是发现了一个重要的性质那就是:如果在内部的交换次数是一个奇数,那么就说明有一个元素的位置没有交换。
#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;
#define int long long 
const int N = 2e5 + 10;
int n, a[N];

void solve()
{
    cin >> n;
    int l = 1, r = n , cnt = 0;
    while(l < r)
    {
        int mid = l + r >> 1;
        cout << "? " << l << " " << mid << endl;
        for(int i = l ; i <= mid ; i ++ ) cin >> a[i];
        cnt = 0;
        for(int i = l ; i <= mid ; i ++ )
            if(a[i] >= l && a[i] <= mid) cnt ++ ;
        if(cnt & 1) r = mid; // 在区间内 缩小区间
        else l = mid + 1; // 在另一个区间
    }
    cout << "! " << l << endl;
}

signed main()
{
    ios::sync_with_stdio(0), cin.tie(0);
    int T;
    cin >> T;
    while(T -- ) solve();
    return 0;
}

标签:return,NO,int,Codeforces,long,803,Div,define
From: https://www.cnblogs.com/xyh-hnust666/p/17063410.html

相关文章

  • SMU Winter 2023 Round #6 (Div.2)
    A.OP题目:现在请你喊出某次神秘活动中的口号"fengqibisheng,yingyueerlai!"(不包含引号)。思路:这道题输出这句话就行B.Add9Zeros题目:题意就是将数组A中的数加9后拿......
  • SMU Winter 2023 Round #7 (Div.2)
    A.解开束缚缠丝II题意:在一堆字符里面找出最长的回文串,并把它的长度输出出来。思路:这道题,一开始想的是把所有情况都列举出来,然后一一判断是不是回文串。后面根据第二个......
  • Codeforces Round #844 (Div. 1 + Div. 2, based on VK Cup 2022 - Elimination Round
    《C.EqualFrequencies》  这道题的题意为:一个字符串str上每个字母的数量都一样,为平衡字符串现在给出一个字符串s,问最少改动多少使s变成平衡字符串,并写出该平衡字......
  • Codeforces Round #753 (Div. 3)(ABCDE)
    A.LinearKeyboard题意:给26个字母代表你的键盘(没错你的键盘键位是一行)再给你一个字符串,问你打出这个字符串需要消耗多少距离思路:前面几个数据键位没乱当然不用......
  • 「解题报告」ARC141D Non-divisible Set
    很有意思的题,我又没想到咋做。值域为\(2m\),我们要找出一个大小为\(m\)的好集合,我们可以先来分析这个好集合的大小的上界是多少。我们可以猜测一波上界就是\(m\)。可......
  • Codeforces Round #804 (Div. 2)
    题目链接A核心思路也是一个观察性质的过程,但是这个性质比较简单。我们可以发现两个数相等的时候比较好构造。并且我们取另外一个数为1就好了。//Problem:A.TheThir......
  • CodeForces 1783F Double Sort II
    洛谷传送门CF传送门考虑只有一个排列怎么做。有一个结论是答案为\(n\-\)置换环个数,即每个环都会选择一个点不操作,其他点都操作。接下来考虑两个排列,显然当\(x\)在......
  • Codeforces Round #820 (Div. 3) A~F泛做
    一套题学到不少东西A.TwoElevators模拟#include<bits/stdc++.h>usingnamespacestd;#defineendl'\n'#definecerr(x)std::cerr<<(#x)<<"is"<<(x)<<......
  • CodeForces 构造题专项解题报告(二)
    CodeForces构造题专项解题报告(二)\(\newcommand\m\mathbf\)\(\newcommand\oper\operatorname\)\(\newcommand\txt\texttt\)\(\text{ByDaiRuiChen007}\)来源:CodeF......
  • [CSS]背景图片很大,根据屏幕缩小适配后,div之间有空隙的问题
    RT。美术给的素材宽度是1080px的。在不缩放的情况下,1080px宽度的屏幕显示div之间正常,没有空隙,但使用transform属性之后,div缩小,div之间有空隙(白线) 百度有人说给这些div......