CodeForces - 264A(思维题)

CodeForces - 264A(思维题)

Squirrel Liss lived in a forest peacefully, but unexpected trouble happens. Stones fall from a mountain. Initially Squirrel Liss occupies an interval [0, 1]. Next, n stones will fall and Liss will escape from the stones. The stones are numbered from 1 to n in order.

The stones always fall to the center of Liss’s interval. When Liss occupies the interval [k - d, k + d] and a stone falls to k, she will escape to the left or to the right. If she escapes to the left, her new interval will be [k - d, k]. If she escapes to the right, her new interval will be [k, k + d].

You are given a string s of length n. If the i-th character of s is “l” or “r”, when the i-th stone falls Liss will escape to the left or to the right, respectively. Find the sequence of stones’ numbers from left to right after all the n stones falls.

Input
The input consists of only one line. The only line contains the string s (1 ≤ |s| ≤ 106). Each character in s will be either “l” or “r”.

Output
Output n lines — on the i-th line you should print the i-th stone’s number from the left.

Examples
Input
llrlr
Output
3
5
4
2
1
Input
rrlll
Output
1
2
5
4
3
Input
lrlrr
Output
2
4
5
3
1
Note
In the first example, the positions of stones 1, 2, 3, 4, 5 will be , respectively. So you should print the sequence: 3, 5, 4, 2, 1.

  • 题目大意:
    有一个[0,1]的区间,然后每次砸石头砸到区间的中间,然后一个人如果选择往右跳那区间就更新为 [0.5,1] 如果往左跳区间就更新为[0,0.5]。然后下一次再砸到中间……依次往下。把石头都标上号,然后输出的是从左到右石头的 标号数。
  • 解题思路:
    ans[i]里存的是第i个位置碰到的石头编号
    假如,第一次你往左跳的话,那么ans[n]=1;因为不可能有其他的石头会在这个石头的右边了因为区间更新为[0,0.5]了,所以第n个石头一定是 1号石头。同样的如果第一次往有跳,那么ans[1]=1 因为不可能有石头会在他的左边了,因为区间更新为[0.5,1]了。然后每一个石头都这么考虑。。类似于一个双向的队列。
  • AC代码
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn=1e6+10;
int l,r;
char a[maxn];
int ans[maxn];
int main()
{
	scanf("%s",a);
	int len=strlen(a);
	l=1;r=len;
	for(int i=0;i<len;i++)
	{
		if(a[i]=='l')
			ans[r--]=i+1;
		else
			ans[l++]=i+1;
	}
	for(int i=1;i<=len;i++)
		//cout<<ans[i]<<endl;
		printf("%d\n",ans[i]);
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值