Codeforces Round 914 (Div. 2)A~C

这篇具有很好参考价值的文章主要介绍了Codeforces Round 914 (Div. 2)A~C。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

A
反过来考虑,由皇后和国王的位置去寻找骑士的位置,当一个点既可以被皇后找到,也可以被国王找到时就说明这个点是满足条件的

#include <bits/stdc++.h> 
#define rep(i,a,b) for(int i = (a); i <= (b); ++i)
#define fep(i,a,b) for(int i = (a); i >= (b); --i)
#define ls p<<1
#define rs p<<1|1
#define PII pair<int, int>
#define ll long long
#define ull unsigned long long
#define db double
#define endl '\n'
#define debug(a) cout<<#a<<"="<<a<<endl;
#define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
#define INF 0x3f3f3f3f 
#define x first
#define y second
using namespace std;

const int N=3e5+10;
int n,m;
int dx[]={0,1,1,-1,-1};
int dy[]={0,1,-1,1,-1};
void solve()
{
	map<PII,int>mp;
	int xk,yk,xq,yq,a,b;cin>>a>>b>>xk>>yk>>xq>>yq;
	rep(i,1,4)
	{
		mp[{xk+dx[i]*a,yk+dy[i]*b}]++;
		if(a!=b)	mp[{xk+dx[i]*b,yk+dy[i]*a}]++;
		mp[{xq+dx[i]*a,yq+dy[i]*b}]++;
		if(a!=b)	mp[{xq+dx[i]*b,yq+dy[i]*a}]++;
	}
	int ans=0;
	for(auto cnt:mp)	if(cnt.y>1)	ans++;
	cout<<ans<<endl;
}

int main()
{
	IOS	
//  	freopen("1.in", "r", stdin);
  	int t;
	cin>>t;
	while(t--)
	solve();
	return 0;
}

B
思路:排序+前缀和
先排序,对于 a [ i ] , 前面的数一定是小于它的一定可以被删除,需要找到后面最远能到达哪里 a[i],前面的数一定是小于它的一定可以被删除,需要找到后面最远能到达哪里 a[i],前面的数一定是小于它的一定可以被删除,需要找到后面最远能到达哪里
假设最远能到达 r ,那么 [ i , r ] 这一段区间中所有数的答案是一样的都是到 r ,如何判断哪里是最远? 假设最远能到达r,那么[i,r]这一段区间中所有数的答案是一样的都是到r,如何判断哪里是最远? 假设最远能到达r,那么[i,r]这一段区间中所有数的答案是一样的都是到r,如何判断哪里是最远?
当 s [ r ] < a [ r + 1 ] 时就说明此时 r 到达了最远 当s[r]<a[r+1]时就说明此时r到达了最远 s[r]<a[r+1]时就说明此时r到达了最远

#include <bits/stdc++.h> 
#define rep(i,a,b) for(int i = (a); i <= (b); ++i)
#define fep(i,a,b) for(int i = (a); i >= (b); --i)
#define ls p<<1
#define rs p<<1|1
#define PII pair<int, int>
#define ll long long
#define ull unsigned long long
#define db double
#define endl '\n'
#define debug(a) cout<<#a<<"="<<a<<endl;
#define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
#define INF 0x3f3f3f3f 
#define x first
#define y second
using namespace std;

const int N=1e5+10;
ll n,m,a[N],s[N],ans[N];
struct node
{
	int val,pos;
}b[N];

bool cmp(node a, node b)
{
	return a.val<b.val;
}

void solve()
{
	cin>>n;
	rep(i,1,n)	cin>>a[i],b[i].val=a[i],b[i].pos=i;
	sort(b+1,b+1+n,cmp);
	rep(i,1,n)	s[i]=s[i-1]+b[i].val;
	int last=0;
	rep(i,1,n)
	{
		if(last<i)
		{
			last=i;
			while(s[last]>=b[last+1].val&&last+1<=n)	last++;
		}
		ans[b[i].pos]=last-1;
	}
	rep(i,1,n)	cout<<ans[i]<<' ';
	cout<<endl;
	rep(i,1,n)	s[i]=0,ans[i]=0;
}

int main()
{
	IOS	
//  	freopen("1.in", "r", stdin);
  	int t;
	cin>>t;
	while(t--)
	solve();
	return 0;
}

C
思路:
当 k = 1 时 当k=1时 k=1显然可以直接暴力求解, O ( n 2 ) 枚举 O(n^2)枚举 O(n2)枚举
当 k > = 3 时 当k>=3时 k>=3结果显然是0,前两次都选择一样的i、j,后面选择新产生的两个数直接相减为0
当 k = 2 时,对 n 2 个数每个数在排好序的 a 数组上面二分找到最接近的维护最小值就是答案 当k=2时,对n^2个数每个数在排好序的a数组上面二分找到最接近的维护最小值就是答案 k=2时,对n2个数每个数在排好序的a数组上面二分找到最接近的维护最小值就是答案
需要注意一定要和最开始的a取一下最小值,因为答案可能在最初的a中文章来源地址https://www.toymoban.com/news/detail-824569.html

#include <bits/stdc++.h> 
#define rep(i,a,b) for(int i = (a); i <= (b); ++i)
#define fep(i,a,b) for(int i = (a); i >= (b); --i)
#define ls p<<1
#define rs p<<1|1
#define PII pair<int, int>
#define ll long long
#define ull unsigned long long
#define db double
#define endl '\n'
#define debug(a) cout<<#a<<"="<<a<<endl;
#define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
#define INF 0x3f3f3f3f 
#define x first
#define y second
using namespace std;

const int N=5e6+10;
ll n,k,a[N],b[N];


void solve()
{
	cin>>n>>k;
	ll ans=1e18;
	rep(i,1,n)	cin>>a[i],ans=min(ans,a[i]);
	if(k>=3)
	{
		cout<<0<<endl;
		return;
	}
	sort(a+1,a+1+n);
	rep(i,2,n)	ans=min(ans,a[i]-a[i-1]);
	if(k==1)
	{
		cout<<ans<<endl;
		return;
	}
	if(k==2)
	{
		rep(i,1,n)	rep(j,i+1,n)
		{
			ll xx=abs(a[j]-a[i]);
			int k=lower_bound(a+1,a+1+n,xx)-a;
			if(k<=n)	ans=min(ans,a[k]-xx);
			if(k>=2)	ans=min(ans,xx-a[k-1]);
		}
		cout<<ans<<endl;
	}
}

int main()
{
	IOS	
//  	freopen("1.in", "r", stdin);
  	int t;
	cin>>t;
	while(t--)
	solve();
	return 0;
}

到了这里,关于Codeforces Round 914 (Div. 2)A~C的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Codeforces Round 867 (Div. 3)

    从所有a[i]+i-1=t的选择种取个max即可 实际上就是取同符号乘积的最大值 找规律,发现结果与边长n的关系是:res = n * (n + 3) - (n - 2) ①当n为奇数时,除了1其他均无解 ②当n为偶数时,我们可以构造一个形如n,1,n - 2,3,...的数列 首先我们可以发现n必定出现在起始位置。如果n不在起

    2024年02月02日
    浏览(49)
  • Codeforces Round 874 (Div. 3)

    用最少的长度为2的字符串按一定规则拼出s。规则是:前一个字符串的尾与后一个字符串的首相同。 统计s中长度为2的不同字符串数量。 给定数组a[n]和b[n],重排b后,令任意|ai−bi|≤k成立(1≤k≤n)数据保证一定有解。 将a和b分别按从小到大的顺序匹配便是最优的,一定能满足

    2024年02月05日
    浏览(38)
  • Codeforces Round 894 (Div. 3)

    签到题 a数组里,大于等于前一个值的a[i]会被写到b里。直接遍历b,如果b[i]比前一个小就在它前面插一个相等的值 计算反过来的长度,判断是否相等就行 对于没有重复口味的集合,能选出的方案是n*(n-1)/2 (从n个里面选2个的组合数)。二分找出需要多少不同口味的冰淇淋,

    2024年02月11日
    浏览(45)
  • Codeforces Round 926 (Div. 2)

    类似于倍投法,就是在一赔一的情况下,第一次压一块钱,每输一次就押注上一次两倍的金额. 假如资金无限的话,这种方法赢的期望为无穷大.原理类似于二进制,不论你输再多次,只要赢一次总额就增加了1.比如 15 二进制1111,前3把一直输,但是只要第4把赢,就一定可以增加 1

    2024年02月20日
    浏览(45)
  • Codeforces Round 868 Div 2

    要求构造一个仅包含 (1) 和 (-1) 的长度为 (n) 的数组 (a) ,使得存在 (k) 个下标对 ((i, j), i j) 满足 (a_i times a_j = 1) 。 当有 (x) 个 (1) , (y) 个 (-1) 时,其满足条件的下标对数量为 (frac{x (x - 1)}{2} + frac{y (y - 1)}{2}) 。 由于 (n) 只有 (100) ,直接枚举 (x) 即可。

    2024年02月01日
    浏览(45)
  • Codeforces Round 866 (Div. 2)

    给出一个仅由_或^组成的字符串,你可以在任意位置添加_或^字符,使得字符串满足: 任意字符要么属于^_^的一部分,要么属于^^的一部分。求最少添加的字符数量。 对于_我们只需处理没有组成^_^的_: ①如果_在首位置且左边没有^则添加^ ②如果_在尾位置且右边没有^则添加

    2023年04月25日
    浏览(57)
  • Codeforces Round 871 (Div. 4)

    给定n个长度为10的字符串,问其与codeforces字符串的对应下标字母不同的个数。 对于每个字符串从前往后依次和“codeforces”对应字符比较然后统计不同字母数即可 给定长度为n的数组,问连续相邻为0的最大长度 维护一个全局最大长度res,和当前连续序列的长度cnt。从前往后扫

    2024年02月03日
    浏览(53)
  • Codeforces Round 918 (Div. 4)补题

    Odd One Out(Problem - A - Codeforces) 题目大意:有三个数,其中两个相同,找出不同的那个数。 Not Quite Latin Square(Problem - B - Codeforces) 题目大意:有一个3*3的矩阵,每行每列都由1,2,3三个元素构成,且同行同列中的元素不同,先有一个地方出现空缺,要求输出空缺位置的元素

    2024年02月01日
    浏览(38)
  • Codeforces Round 889 (Div. 2) 题解

    晚上睡不着就来总结一下叭~(OoO) 终榜!!! 先不放图了。。怕被dalaoHack...呜呜呜~         7.29半夜比赛,本来是不想打的,感觉最近做的题太多了,什么牛客杭电以及CF上的题等等等,挺杂的,也来不及整理,本想梳理一下,而且也感觉今天状态不太好,但见他们都要

    2024年02月15日
    浏览(48)
  • Codeforces Round 875 (Div. 1) 题解

    You are given two arrays a and b both of length n. Your task is to count the number of pairs of integers ( i , j ) (i,j) ( i , j ) such that 1 ≤ i j ≤ n 1≤ij≤n 1 ≤ i j ≤ n and a i ⋅ a j = b i + b j a_i⋅a_j=b_i+b_j a i ​ ⋅ a j ​ = b i ​ + b j ​ 。 1 ≤ a i , b i ≤ n 1≤a_i,b_i≤n 1 ≤ a i ​ , b i ​ ≤ n 考虑 m i n ( a i

    2024年02月08日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包