程序设计思维与实践 Week15 实验(1/2/智能班)

A - Q 老师的记录册

Problem Statement

Q 老师有 N 个学生,每个学生都有各自独立的编号,且编号范围在 1 ~ N 之间。

这一天,所有学生都在不同的时间进入教室。

Q 老师记录了当编号为 i 的学生进入教室时,教室中共有 Ai 个学生(包括编号为 i 的学生)。

现要求根据这些记录,给出学生进入教室的顺序。

Constraints

1 ≤ N ≤ 1e5

1 ≤ Ai ≤ N,Ai 各不相同

所有数字均为整数

Input

输入格式如下:

N
A1 A2 … AN

Output

根据学生进入教室的顺序输出学生的编号。

Sample Input 1

 

3
2 3 1

Sample Output 1

 

3 1 2

Sample Input 2

 

5
1 2 3 4 5

Sample Output 2

 

1 2 3 4 5

Sample Input 3

 

8
8 2 7 3 4 5 6 1

Sample Output 3

 

8 2 4 5 6 7 3 1

 

解题思路

用pair<int,int>中的first记录学生进来顺序,second来记录学生编号,将数组排序,输出编号

#include<iostream>
#include<algorithm>
using namespace std;
pair<int,int> a[100010];
int main()
{
	int n;
	cin >> n;
	for (int i = 1; i <= n; i++)
	{
		cin >> a[i].first;
		a[i].second = i;
	}
	sort(a, a + n + 1);
	for (int i = 1; i <= n; i++)
		cout << a[i].second << " ";
	
}

B - ZJM 的本领

众所周知,ZJM 住在 B 站。

这一天 Q 老师来找 ZJM 玩,ZJM 决定向 Q 老师展现一下自己快速看番的本领。

ZJM 让 Q 老师任意挑选了一部番,Q老师一眼看中了《辉夜大小姐想让我告白》,已知这部番一共有 N 个精彩片段,每个精彩片段用 [L[i], R[i]] 来表示。

ZJM 从第一分钟开始看,每次可以按下快进键,快进 X 分钟,问 ZJM 最快需要多久可以看完这部番。

Input

第一行给出两个整数 N、X(1 ≤ N ≤ 50, 1 ≤ X ≤ 1e5)

接下来 N 行,每行给出两个整数,L[i]、R[i](1 ≤ L[i] ≤ R[i] ≤ 1e5)

数据保证,R[i-1] < L[i]

Output

输出一个整数,表示 ZJM 最快看完这部番的时间。

Examples

Input

2 3
5 6
10 12

Output

6

Input

1 1
1 100000

Output

100000

Note

在第一个样例中,ZJM 从第 1 分钟开始看,由于 [1, 3] 区间内没有精彩片段,因此 ZJM 快进到了第 4 分钟。

观看完 [4, 6] 区间的内容后,时间来到了第 7 分钟,由于 [7, 9] 区间内没有精彩片段,因此 ZJM 快进到了第 10 分钟,观看完 [10, 12] 区间的内容后,看番结束。

一共耗时 3 + 3 = 6 分钟。

解题思路

分别用l[i]和r[i]记录每一个区间的左右端点,若是r[i]+x<l[i+1]的说明可以快进,其中一个间隔可以快进多次

#include <iostream>
using namespace std;

int n,x;
int l[60],r[60];
int ans=0;

int main()
{
	cin>>n>>x;
	for(int i=1;i<=n;i++)
		cin>>l[i]>>r[i];
	int now=1,index=1;
	while(now<=r[n])
	{
		if(now+x<=l[index])
			now=now+x;
		else
		{
			ans=ans+r[index]-now+1;
			now=r[index]+1;
			index++;
		}
	}
	cout<<ans<<endl;
}

C - TT 的神秘任务 - X

TT 的神秘任务系列。

这一次,TT 得到了一个长度为 N 的字符串,任务要求在原字符串中至多删去一个字符,使得字符串的字典序尽可能小。

字符串字典序的比较优先级如下:

  1. 从左往右第一个不同字符的 ASCII 值的大小关系

  2. 字符串长度

Input

第一行给出 N(2 ≤ N ≤ 2e5)。

第二行给出一个长度为 N,且仅包含小写字母的字符串。

Output

输出字典序最小的字符串。

Examples

Input

3
aaa

Output

aa

Input

5
abcda

Output

abca

解题思路

从左到右找到第一个比后面一个 大的记录下位置不输出

#include<iostream>
#include<string>
using namespace std;
string s;
int main(void)
{
	int n;
	cin>>n>>s;
	int idx=n-1;		
	for(int i=0;i<n;i++)
	{
		if(s[i]>s[i+1])		
		{
			idx=i;	
			break;
		}
	}
	for(int i=0;i<idx;i++) 
		cout<<s[i];
	for(int i=idx+1;i<n;i++)
		cout<<s[i];
	cout<<endl;
	return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值