ARC109复盘

又是 A R C ARC ARC是不是我们一上课就有ARC啊!?
好了,回过正题吧
A R C ARC ARC C C C题没有做出来真是可惜啊……

A

题面

AT题面

给定 a a a, b b b, x x x, y y y,其中 a a a b b b表示要从 A A A楼的 a a a楼层到 B B B楼的 b b b楼层, x x x y y y见图(橘色的线是双向的),问最少需要多长时间?
在这里插入图片描述

思路

分情况讨论。
首先如果以折线走( 2 x 2x 2x)更好,我们就会选择 2 x 2x 2x,而不是 y y y
接下来,我们开始分情况讨论。

  1. a>b 我们走a-b-1个楼梯,再走一个走廊。
  2. a=b 直接走一个y即可。
  3. a<b 同理,走b-a个楼梯,再走一个走廊。

代码

#include<bits/stdc++.h>
#include<algorithm>
#define int long long
using namespace std;
signed main(){
	//freopen(".in","r",stdin);
	//freopen(".out","w",stdout);
	//MessageBox(GetForegroundWindow(),"标题","内容",MB_YESNO);
	int a,b,x,y;
	cin>>a>>b>>x>>y;
	int sum=0;
	if(x+x<y){
		y=x+x;
	}
	if(a>b){
		sum=(a-b-1)*y;
		sum+=x;
	}else if(a==b){
		sum=x;
	}else{
		sum=(b-a)*y;
		sum+=x;
	}
	cout<<sum<<endl;
	return 0;
}

B

题面

AT题面
斯努克正在拜访东京一家名为 109 109 109的商店,准备购买一些原木。
他想要 n n n个原木:一个长度为1,一个长度为 2 2 2,…,一个长度为 n n n。这家商店有 n + 1 n+1 n+1个原木库存:一个长度为1,一个长度为 2 2 2,…,和一个长度为 n n n+1的圆木。这些圆木每根售价为1日元(日本货币)。买了这些原木后,他可以想砍多少次就砍多少次。也就是说,他可以得到长度为 L 1 L1 L1…的 k k k个对数。, L k Lk Lk来自长度为 L L L的对数,其中 L L L= L 1 L1 L1+ ⋯ ⋯ + L k Lk Lk。他还可以扔掉不需要的原木。斯努克想花尽可能少的钱来得到他想要的原木。
找出获得n所需的最低金额。长度为1到n的原木。

思路

第一眼看到这道题,想到的就是找规律。
不难发现,只要一段一段切,就能找到规律。

代码

#include<bits/stdc++.h>
#include<algorithm>
#define int long long
using namespace std;
signed main(){
	//freopen(".in","r",stdin);
	//freopen(".out","w",stdout);
	//MessageBox(GetForegroundWindow(),"标题","内容",MB_YESNO);
	int n;
	cin>>n;
	int m=n;
	for(int i=1;n+1>=i;i++){
		n-=i;
		m--;
	}
	cout<<m+1<<endl;
	return 0;
}

C

题面

AT题面
由于题面过于复杂,本蒟蒻就不翻译了,大佬们看AT题面吧。

思路

R M Q RMQ RMQ
仔细阅读题面后,想必大佬们想的都是倍增,RMQ等等,虽然本菜鸡也想到了,但比赛时间只剩15min了……

代码

#include <bits/stdc++.h>
using namespace std;
int n, k;
string s, t;
int main() {
	char win[202][202];
	win['R']['R']=win['R']['S']=win['S']['R']='R';
	win['S']['S']=win['P']['S']=win['S']['P']='S';
	win['P']['P']=win['P']['R']=win['R']['P']='P';
	cin>>n>>k>>s;
	while(k--) {
		t=s+s;
		for(int i=0;i<n;i++)
			s[i]=win[t[i*2]][t[i*2+1]];
	}
	cout<<s[0]<<endl;
    return 0;
}

总结

比赛时降智。看来还是要多练习 R M Q RMQ RMQ
说实话,我真的没想过 A T AT AT会考 R M Q RMQ RMQ。唉,wtcl,还是要多练习啊/kk
以后多刷思维题,争取拿到 C C C题吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值