zoukankan      html  css  js  c++  java
  • CF67A Partial Teacher 题解

    CF67A Partial Teacher 题解

    CF67A

    题目思路:

    这道题主要思路是模拟,可以当成构造题来做。

    需要注意判断在已经构造了一部分时,已经构造完毕的部分是否为最小值。

    题目分析:

    先设 (a) 数组来表示最终要输出的数字,则我们初始化 a[n]=1.

    我们可以先把每个操作存进来,然后倒着往前进行操作。

    当读到字符为 (=) 时,a[i]=a[i+1];

    当读到字符为 (L) 时,a[i]=a[i+1]+1;

    当读到字符为 (R) 时,此时不能单纯的减去1,要判断在这里我们已经构造完毕的数值是否为最小值。

    如果是最小值,则 a[i]=a[i+1]-1 ,否则,就要进行判断,若右边值是1就加1,以此类推。

    代码:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<cstdlib>
    #define ll long long
    using namespace std;
    int a[1002],i,j,n;
    char ch[1001];
    
    void work(char cha) {
    	if(cha=='=')
    		a[i]=a[i+1];
    	else if(cha=='L')
    		a[i]=a[i+1]+1;
    	else if(cha=='R') {
    		a[i]=1;
    		if (a[i+1]==1) {
    			a[i+1]++;
    			for (int j=i+1; j<=n; j++) {
    				if (ch[j]=='=') {
    					a[j+1]=a[j];
    				} else if (ch[j]=='R'&& a[j+1]==a[j]) {
    					a[j+1]++;
    				} else {
    					break;
    				}
    			}
    		}
    	}
    }
    
    int main() {
    	cin>>n;
    	for(i=1; i<n; ++i)
    		cin>>ch[i];
    	a[n]=1;
    	now=n;
    	for(i=n-1; i>=1; --i)
    		work(ch[i]);
    	for(i=1; i<=n; ++i)
    		cout<<a[i]<<" ";
    	return 0;
    }
    
  • 相关阅读:
    python学习第三天
    python学习第二天
    如何解决自学编程的犯困问题
    python学习计划第四天-python第一天
    python学习第三天-Linux入门之二
    python第二天-Linux基础学习
    python入门第一天-Linux的学习入门
    Linux下gdb的使用
    整理一下常见的十种排序
    对指针的理解
  • 原文地址:https://www.cnblogs.com/EdisonBa/p/13810083.html
Copyright © 2011-2022 走看看