【2020.10.29普及组】SSL模拟赛题解

目录:

T1:捡石头
T2:魔法药水
T3:土地恢复
T4:组合数
T5:排数字
T6:小武的方程

T1:捡石头

题目描述

地上有2N个石头,排成了一条线,相邻的石头距离为1,石头之间有着不同的大小,有N种大小不同 的石头,即相同大小的石头有2个,现将石头按照从小到大的顺序依次编号为1到N,有2个石头共享 相同的编号,现在小武和小林要同时从最左边的石头出发,按照石头大小依次捡起编号为1到N的石 头,并且相同编号的石头同一个人只能捡起来一次,现在他们想把地上的石头都捡完,求两个人的行 走的最短距离和为多少?

输入格式

第一行一个正整数N 第二行2N个数,按照石头从左到右的顺序依次给出石头的编号

输出格式

一行一个数表示行走的最短距离和

输入输出样例

输入 #1

3
1 1 2 2 3 3

输出 #1

9

输入 #2

4
2 2 3 4 4 1 1 3

输出 #2

33

输入 #3

3
1 3 1 2 3 2

输出 #3

11

分析:

可以用 d p dp dp做 也可以直接模拟

CODE:

#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
int n,ans;
struct node{
   
	int x,y;
}a[101000];
bool cmp(node l,node r)
{
   
	if(l.x==r.x)return l.y<r.y;
	return l.x<r.x;
}
int main(){
   
	scanf("%d",&n);
	for(int i=1;i<=2*n;i++)
	{
   
		scanf("%d",&a[i].x);
		a[i].y=i;
	}
	sort(a+1,a+n*2+1,cmp);
	ans=a[1].y-1+a[2].y-1;
	for(int i=3;i<=n*2;i++)
		ans=ans+abs(a[i].y-a[i-2].y);
	printf("%d",ans);
}

T2:魔法药水

题目描述

小武的实验室里有一种魔法药水,这个药水有个很奇怪的性质,它只能在盛放的体积为2的幂次时保 持稳定,例如1,2,4,8。所以小武在实验室里放置了很多容积为2的幂次的瓶子,其中N瓶放有魔法药 水,第i瓶魔法药水的体积为2的L[i]次方。这天小武想要收拾一下实验室,小武想知道最少用多少个瓶 子能把实验室的药水装完。
假设小武有任意2的幂次容积的瓶子,并且每种瓶子的数量足够使用。

输入格式

第一行一个正整数N
第二行N个数,表示L[i]

输出格式

一行一个数表示最少需要多少个瓶子

输入输出样例

输入 #1

5
1 1 2 3 3

输出 #1

2

输入 #2

6
7 6 4 6 7 0

输出 #2

4

输入 #3

7
8 6 6 8 2 8 4

输出 #3

5

分析:

记录当前的值 每两个可以组成一个更大的

CODE:

#include<cstdio>
#include<iostream>
#define ll long long
using namespace std;
int n,a[10000005],maxi;
ll ans;
int main()
{
   
	scanf("%d",&n);
	for(register int i=1;i<=n;i++)
	{
   
		int x;
		scanf
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值