zoukankan      html  css  js  c++  java
  • [CF1476D] Journey

    [CF1476D] Journey - dp

    Description

    有点 0...n,对于第 i 条边 (i-1,i) 告诉你该边的方向,每走一步所有边的方向都会反转,对于每个点请你求出从该点最多能走到多少个不同的点。

    Solution

    如果碰到两条相同的边,就会返回,所以我们预处理出每个点向右走和向左走分别能走多少步,然后枚举起始点即可

    #include <bits/stdc++.h>
    using namespace std;
    
    #define int long long
    
    void solve()
    {
        int n;
        cin >> n;
    
        string str;
        cin >> str;
    
        vector<int> fl(n), fr(n);
        fl[0] = 1;
        for (int i = 1; i < n; i++)
            fl[i] = fl[i - 1] * (str[i] != str[i - 1]) + 1;
        fr[n - 1] = 1;
        for (int i = n - 2; i >= 0; i--)
            fr[i] = fr[i + 1] * (str[i] != str[i + 1]) + 1;
    
        vector<int> ans(n + 1);
        for (int i = 0; i <= n; i++)
        {
            if (i == 0)
                ans[i] = (str[i] == 'R' ? fr[i] + 1 : 1);
            if (i == n)
                ans[i] = (str[i - 1] == 'L' ? fl[i - 1] + 1 : 1);
            if (0 < i && i < n)
                ans[i] = (str[i] == 'R' ? fr[i] + 1 : 1) + (str[i - 1] == 'L' ? fl[i - 1] + 1 : 1) - 1;
        }
    
        for (int i = 0; i <= n; i++)
            cout << ans[i] << " ";
        cout << endl;
    }
    
    signed main()
    {
        ios::sync_with_stdio(false);
    
        int t;
        cin >> t;
    
        while (t--)
            solve();
    }
    
  • 相关阅读:
    5-1
    浅谈sql中的in与not in,exists与not exists的区别
    理解SQL SERVER中的分区表
    SQLSERVER SQL性能优化
    SQL Server Profiler使用方法
    SQL Server中的三种Join方式
    执行计划
    执行计划sql
    INSERT INTO SELECT
    设计模式学习笔记-单例模式
  • 原文地址:https://www.cnblogs.com/mollnn/p/14511741.html
Copyright © 2011-2022 走看看