首页 > 其他分享 >CodeTON Round 4 (Div. 1 + Div. 2, Rated, Prizes!) A-D题解

CodeTON Round 4 (Div. 1 + Div. 2, Rated, Prizes!) A-D题解

时间:2023-04-01 13:46:17浏览次数:44  
标签:Rated cout int 题解 cin flag 通知 res Div

题目地址

A - Beautiful Sequence

题意:给出一个数组,问是否存在任意一个子区间,存在i,使得ai=i

Solution

直接比较当前的数和i的大小就行了,当前为x,如果要求答案存在,必须有i>=x

void solve()
{
	int n;cin>>n;
	int flag=0;
	for(int i=1;i<=n;i++)
	{
		int x;cin>>x;
		if(i>=x)
		{
			flag=1;
		}
	}
	if(flag)cout<<"YES\n";
	else cout<<"NO\n";
}

B - Candies

题意:最开始有1个糖果,当前糖果数为res时,可以进行两种操作:

1.res=2*res+1

2.res=2*res-1

给出n,问能否通过任意次操作1和2使得糖果数变为n

Solution

可以由n进行倒推,如果倒推得到的是偶数就不继续进行下去,这里写了个递归

void dfs(int x,int pos)
{
	if(x==1&&!flag)
	{
		cout<<pos<<"\n";
		for(int i=pos;i>=1;i--)
		{
			cout<<a[i]<<" ";
		}
		cout<<"\n";
		flag=1;
		return;
	}
	if((((x+1)/2)&1)&&!flag)
	{
		a[pos+1]=1;
		dfs((x+1)/2,pos+1);
	}
	if((((x-1)/2)&1)&&!flag)
	{
		a[pos+1]=2;
		dfs((x-1)/2,pos+1);
	}
}


void solve()
{
	int n;cin>>n;
	flag=0;
	if(n%2==0)
	{
		cout<<"-1\n";
		return;
	}
	dfs(n,0);
	if(!flag)cout<<"-1\n";
}

C - Make It Permutation

题意:给出一个数组,删除任意一个数代价为c,添加任意一个数代价为d,求使得数组变为一个非空排列(长度为k的排列当且仅由1,2,..,k组成)的最小代价

Solution

对原序列排个序,然后依次以a[i]为长度的排序更新答案,将a[i]左边的重复的数都删掉,右边的也都删掉,然后再加上缺少的数即可

void solve()
{
	int n,c,d;cin>>n>>c>>d;
	for(int i=1;i<=n;i++)cin>>a[i];
	sort(a+1,a+1+n);
	int ans=1e18;
	set<int>st;
	int cnt=0;
	for(int i=1;i<=n;i++)
	{
		if(st.count(a[i]))
		{
			cnt++;
			continue;
		}
		int x=c*(n-i+cnt)+d*max(0LL,a[i]-st.size()-1);
		//cout<<(n-i+cnt)<<" "<<a[i]-st.size()-1<<"\n";
		//cout<<x<<"\n";
		ans=min(ans,x);
		st.insert(a[i]);
	}
	ans=min(ans,d+c*n);
	cout<<ans<<"\n";
}

D - Climbing the Tree

题意:有一只蜗牛爬树,白天爬a米,晚上掉下来b米,树高未知,有两种通知:

  1. 1 a b n表示蜗牛花了n天爬到树顶
  2. 2 a b询问需要爬几天才能到树顶

有q次通知,如果当前通知1与前面的通知1相违背,则忽视当前的通知

如果当前的通知2答案确定,输出答案,反之则输出-1

Solution

对于通知1来说,我们可以求得树高的一个范围区间[l,r]

如果n=1,那么l=1,r=a

如果n≠1,那么l=(a-b)(n-2)+a+1,r=(a-b)(n-1)+a

于是我们可以通过区间来判断是否通知1是否与前面的相符合,如果与前面的有交集,则可以进一步更新h的范围,即l=max(l,ll),r=min(r,rr)

对于通知2来说,要想在第x天到树顶,第x-1天一定到不了l,即(x-2)*(a-b)+a<l

而如果答案唯一,只有一种可能,那就是(x-1)*(a-b)+a>=r

赛时交集判断错了,改了一下直接过了,麻了

void solve()
{
	int q;cin>>q;
	int h=-1;
	int l=-1,r=-1;
	while(q--)
	{
		int op,a,b;cin>>op>>a>>b;
		if(op==1)
		{
			int n;cin>>n;
			if(h==-1)
			{
				l=(a-b)*(n-2)+a+1;
				if(n==1)l=1;
				r=(a-b)*(n-1)+a;
				h=0;
				cout<<"1 ";
			}else
			{
				int ll=(a-b)*(n-2)+a+1;
				if(n==1)ll=1;
				int rr=(a-b)*(n-1)+a;
				if(ll>r||rr<l)
				{
					cout<<"0 ";
				}else
				{
					cout<<"1 ";
					l=max(ll,l);
					r=min(rr,r);
				}
			}
		}else
		{
			if(h==-1)
			{
				cout<<"-1 ";
				continue;
			}
			int x=l-a;
			if(x<0)x=0;
			int last=-1;
			int cnt=x/(a-b);
			int now=(a-b)*cnt;
			int num=0;
			if(now+a>=r)cout<<cnt+1<<" ";
			else if(now+a<r&&now+a>=l)cout<<"-1 ";
			else if(now+a<l)
			{
				now+=a-b;
				cnt++;
				if(now+a>=r)cout<<cnt+1<<" ";
				else if(now+a<r&&now+a>=l)cout<<"-1 ";
			}
		}
	}
	cout<<"\n";
}

标签:Rated,cout,int,题解,cin,flag,通知,res,Div
From: https://www.cnblogs.com/HikariFears/p/17278496.html

相关文章

  • Thinkpad T14升级Windows11ver22h2失败问题解决小记
    背景手头的ThinkPad在近一年的时间里每次升级Windows11的22h2版本每次都会报错,具体有以下几种情况:更新过程中无问题,重启后黑屏更新过程中会卡在26%左右,然后蓝屏报KENERAL_CHECK_FAIL,接着便自动重启进入修复程序在WindowsUpdate更新中报错0xC1900101在上述错误出现后,再次更......
  • cf-div.2-860d
    题目链接:https://codeforces.com/contest/1798/problem/D贪心,比赛时一直搞C没搞出来,回头看D反而更简单。贪心策略:能填正数就填,填不了填负数。大致证明:构造的区间一定呈一个这样的特定区间,正...负正负负...负正....负负,证明一段区间为正且小于给定值易证,下面证最后一段区间的绝......
  • Codeforces Round 859 (Div. 4) ABCDE(交互题)FG1G2
    EFG1G2质量还挺好的A.PlusorMinushttps://codeforces.com/contest/1807/problem/A题目大意:给定a,b,c,问我们是a+b==c还是a-b==c?把正确的符号输出。input1112332129-7347112110336991899019-81910output+--++-++--+......
  • 使用 wine 安装微信遇到的问题解决方法
    1.中文显示成方块添加启动环境变量:LANG=zh_CN.UTF-82.输入框不显示文字安装winetrickssudoaptinstallwinetricks#oryay-Sywinetricks然后安装riched20winetricksriched20......
  • 无所畏惧的求和题解
    无所畏惧的求和题解本题是本人目前出的题中难度最高的题。可能可以评一个黑?可能有点过,但是紫色是肯定可以的。题目链接:无所畏惧的求和-洛谷尽情享受吧!这道题其实做法有很多:待定系数法+矩阵求解推代数公式组合数学+待定系数法推组合公式第一类斯特林数(时......
  • 定时任务@Scheduled中的cron 表达式和 fixedRated类配置参数
    1.cron表达式格式:@Scheduled(cron="******"){秒数}{分钟}{小时}{日期}{月份}{星期}{年份(可为空)}{秒数} ==>允许值范围:0~59,不允许为空值,若值不合法,调度器将抛出SchedulerException异常"*"代表每隔1秒钟触发;","代表在指定的秒数触发,比如"0,15,45"......
  • Div滚动到头以后置顶
    1<!DOCTYPEHTML>2<html>3<head>4<metacharset="utf-8"/>5<title>Div滚动到头以后置顶</title>6</head>7<bodystyle="height:2000px;">8<divstyle="height:200px&q......
  • cf-div2-860c
    题目链接:https://codeforces.com/contest/1798/problem/C大致题意:给你一个长度为\(n(n<=2e5)\)的序列的\(a_i,b_i\),让你把这个序列分成数目最少的段,每一段都有一个值\(c\),\(c=a_i的一个约数乘以b_i\)。比赛没写出的题。思路:\(首先一段里面的所有a_i*b_i能够整除c,易得c是所有b的......
  • 怎么改变div的位置、大小
    http://www.divcss5.com/rumen/r53973.shtml?ivk_sa=1024320uhttps://www.bbsmax.com/A/VGzl2Pk85b/ 可以使用css中的position来对div进行定位来改变div的位置,position属性值的含义。加上position:absolute,位置可以改变。    static:元素框正常生成。块级元素生成一个......
  • Arduino 外接 DS3132 读数为2165/165/165问题解决
    即使SCL/SDA不接线,DS3132也会返回,这个值为2165/165/165因此问题的来源为接线不牢靠。接线牢靠的标准:RTC模块(ZS-042)上的PWR灯应该常亮,并且亮度很大(我一开始接线,PWR亮度小,而且闪烁)RTC的SCL接Arduino的A4,SDA接Arduino的A5.The165indicatesthatthedatalinefor......