首页 > 其他分享 >Codeforces Round 867 (Div. 3)(A~D)

Codeforces Round 867 (Div. 3)(A~D)

时间:2023-04-27 22:23:15浏览次数:55  
标签:题意 int ll cin 867 Codeforces -- ans Div

目录

A. TubeTube Feed

题意

给定时间 \(t\) ,每个视频有一个价值 \(b_i\),观看一个视频需要 \(a_i\) 秒,跳过一个视频需要花费\(1s\),求能观看完的价值最大的视频编号

思路

从前到后遍历即可,当 \(a_i\) 小于 \(t\),并且 \(b_i\) 比当前价值 \(val\) 大时,更新答案

代码

#include<bits/stdc++.h>
using namespace std;

int main()
{
	int T;
	cin>>T;
	while(T--)
	{
		int n,all;
		cin>>n>>all;
		vector<int>a(n+1),b(n+1);
		for(int i=1;i<=n;i++)
			cin>>a[i];
		
		for(int i=1;i<=n;i++)
			cin>>b[i];
		
		int val=-1;
		int id;
		for(int i=1;i<=n;i++)
		{
			if(a[i]<=all)
			{
				if(b[i]>val)
				{
					val=b[i];
					id=i;
				}
			}
			all--;
		}
		
		
		if(val==-1)puts("-1");
		else cout<<id<<endl;
	}
	return 0;
}

B. Karina and Array

题意

给定一个数组,数组中必须至少包含两个元素。你可以删除任意数量的元素(可能为零),求操作完后相邻元素的最大乘积可以是多少

思路

  • 当正数和负数的个数 \(\geq 2\) 时, 答案为两种数字里,绝对值最大值和次大值的乘积取 \(max\) 。
  • 当有一个正数一个负数时,如果有0存在,答案为0;否则答案为正数与负数的乘积

代码

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
	int T;
	cin>>T;
	while(T--)
	{
		int n;
		cin>>n;
		vector<ll>a,b;
		
		bool flag=false;
		for(int i=0;i<n;i++)
		{
			ll x;
			cin>>x;
			if(x>0)a.push_back(x);
			else b.push_back(-x);
		}
	
		sort(a.begin(),a.end(),greater<ll>());
		sort(b.begin(),b.end(),greater<ll>());
		
		ll ans=-1e9;
		if(a.size()>=2)ans=max(ans,a[0]*a[1]);
		if(b.size()>=2)ans=max(ans,b[0]*b[1]);
		
		if(a.size()==1&&b.size()==1)
		{
			if(n>2)ans=0;
			else ans=-a[0]*b[0];
			
		}
		
	    cout<<ans<<endl;
	}
	return 0;
}

C. Bun Lover

题意

求深色边框的长度
image

思路

观察图形猜结论,可以平移线段填补边框,推导出公式
image
发现当边长为 \(n\) ,长度 \(length+=n*4+i*2-(n-4) \quad [for\quad i \quad in \quad [2 \sim n-1]]\)
$ a_n=4,8,…,2n-2,S_n= \frac{(n-2)(4+(2n-2))}{2}=(n-2)*(n+1)$

代码

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
	int T;
	cin>>T;
	while(T--)
	{
		ll n;
		cin>>n;
		
		ll res=n*4+(n-2)*(n+1);

		cout<<res-n+4<<endl;
	}
	
	return 0;
}

D. Super-Permutation

题意

设 \(b_i=(a_1+a_2+ … +a_i)\) ,问能否找到 \(1\sim n\) 的一个排列 \([a_1,a_2,…,a_n]\),使得 $ [b_1+1,b_2+1,…,b_n+1]$ 也是\(1\sim n\) 的一个排列,若存在,输出 \([a_1,a_2,…,a_n]\);否则输出\(-1\)

思路

  • 当 \(n=1\) 时,答案显然为 \(1\)
  • 当 \(n\gt 1\) 时, 假设 \(a_k= n\),那么 \(b_k=(a_1+a_2+…+a_k) (mod \ n)=(b_{k-1}+n)(mod \ n)=b_{k-1},k\) 只能取 \(1\),否则 \(b\) 就不是一个排列,因此 \(a_1\) 必定为 \(n\)
    • 当 \(n\) 为奇数时,$ b_n=(a_1 + a_2 + … + a_n)mod n=(1+2+ … +n)mod n= \frac{n(n+1)}{2}modn=0=b_1 $ ,\(b\) 中有重复的数字,无解
    • 当 \(n\) 为偶数时,根据样例,可以构造 \(a=[n,n-1,2,,n-3,4,…,n-i]\)
      • \(a[0]=0\)
      • 当 \(i\) 是奇数时 \(a[i]=n-i\)
      • 当 \(i\) 是偶数时 \(a[i]=i\)

代码

#include<bits/stdc++.h>
using namespace std;

int main()
{
	int T;
	cin>>T;
	
	while(T--)
	{
		int n;
		cin>>n;
		if(n==1)
		{
			puts("1");
			continue;
		}
		
		if(n%2==1)puts("-1");
		else{
			cout<<n<<' ';
			
			for(int i=1;i<=n-1;i++)
			{
				if(i%2==1)cout<<n-i<<' ';
				else cout<<i<<' ';
			}
			
			puts("");
		}
	}
	
	
	return 0;
}

标签:题意,int,ll,cin,867,Codeforces,--,ans,Div
From: https://www.cnblogs.com/zzmxj/p/17360392.html

相关文章

  • Codeforces Round 867 (Div. 3)
    CodeforcesRound867(Div.3)A-TubeTubeFeed#include<bits/stdc++.h>usingnamespacestd;typedefpair<int,int>PII;typedefpair<string,int>PSI;constintN=50+5,INF=0x3f3f3f3f,Mod=1e6;constdoubleeps=1e-6;typedeflonglongll;......
  • js javascript 鼠标触碰select下拉列表渐变出div层,鼠标离开渐变缩回
    <!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"><head><metahttp-equiv="Content-......
  • Codeforces Round 866 (Div. 1) C. The Fox and the Complete Tree Traversal (构造)
    传送门题目大意:  给定一个有n个点的树,我们可以任意选择一个点作为起点,这个点可以跳到跟自己距离为1或者距离为2的点,已经到达的点不能再到达(最终必须回到起点),询问是否存在一种方案可以从一个点出发经过所有的点最终再回到这个点来。  输入一个整数n。紧接着输入n-1条边。大......
  • Codeforces Round 847 (Div. 3) G.Tokens on Graph (构造)
    传送门题目大意  给定一个无向图,我们定义图中有四种点,一种是黑色的点表示终点,并且黑色的点始终是1号点,一种是红色的点,一种是灰色的点,最后一种就是没有颜色的点。  游戏规则:我们必须移动任意一个灰色的点到相邻的点上,如果灰色的点移动到了红色的点上,那么我们可以移动其他灰......
  • 前端隐藏和显示div的方式js和beetle:
    方式一:设置元素style对象中的display属性1、vart=document.getElementById('demo');//选取id为test的div元素2、t.style.display='none';//隐藏选择的元素3、t.style.display='block';//以块级样式显示方式二:设置元素style对象中的visibility属性1、vart=documen......
  • 让CSS里div上下左右绝对居中几种方式
    1、绝对定位(常用于登录模块)备注:前提条件div需要有宽高1<divclass="box"></div>2#css3.box{4position:absolute/fixed;5left:0;6right:0;7top:0;8bottom:0;9margin:auto;10}2、margin负值备注:前提条件div需要有宽高1<divclass="box"&g......
  • Codeforces Round 867 (Div. 3)
    A.TubeTubeFeed#include<bits/stdc++.h>usingnamespacestd;intmain(){intq;cin>>q;while(q--){intn,t,res=-1,id=-1;cin>>n>>t;vector<int>a(n+1),b(n+1);......
  • Educational Codeforces Round 147 (Rated for Div. 2)
    Preface补题这周比赛挺少,不过后面可能就很少有时间补以前的比赛了的说现在除了要做学校的集训专题外,还要刷一下蓝桥杯国赛的题,可以说是很忙碌了而且由于JAVA的期末考试要来了,为了熟悉下语法以后补题的时候前面的题目可能会用JAVA来写(其实我写的JAVA看起来和C++真没啥区别)A.......
  • B. Equalize by Divide - 贪心+思维+构造+数学+排序
    题意:给定一个数组,可以进行任意多次以下操作:1.选择第i和第j个数。2.使a[i]=a[i]/a[j](向上取整)。不可以插入或者删减数组元素,求多少次使数组元素都相同,输出次数以及每次操作的两个下标i,j;如果无法实现输出-1.分析:数组中存在1一定无法实现,或者数组元素都相......
  • Codeforces 1781G - Diverse Coloring(构造)
    vp时候想到大致思路了,但是死活调不对,赛后套取cf的数据调了好久才过/ll首先直觉告诉我们答案不会太大。稍微猜一猜可以猜出除了四个点的菊花之外答案都是\(n\bmod2\),下面我们来通过构造证明这件事情。首先,链的情况是trivial的,直接根据奇偶性间隔染色即可。如果不是链,那么......