zoukankan      html  css  js  c++  java
  • *[hackerrank]Lexicographic paths

    https://www.hackerrank.com/contests/w9/challenges/lexicographic-steps

    这题还是折腾很久的。题目意思相当于,比如有两个1两个0,那么找组成的数里第k大的。想法就是,如上例,假如K为4,那么先看后两位够了么C(2,2)=1,不够,那么看后三位C(3,2)=3,也不够,后四位是C(4,2)=6,够了,那么第一个1在倒数第4位。然后减去C(3,2)继续做。

    #include <iostream>
    #include <vector>
    using namespace std;
    
    int main() {
        int t;
        cin >> t;
        while (t--) {
            int n, m, k;
            cin >> n >> m >> k;
            k++;
            string s;
            s.resize(m + n);
            while (m > 0) {
    			// find pos for the first remaining V
    			int x = m;
    			int lastR = 0;
    			int r = 1;
    			while (k > r) {
    				lastR = r;
    				x++;
    				r = r * x / (x - m);
    			}
    			// r >= k, fill one V
    			s[s.size() - x] = 'V';
    			m--;
    			k -= lastR;
            }
            for (int i = 0; i < s.size(); i++) {
            	if (s[i] != 'V')
            		s[i] = 'H';
            }
            cout << s << endl;
        }
    }
    

      

  • 相关阅读:
    cogs luogu 1901. [国家集训队2011]数颜色 待修改莫队
    luogu cogs 421. HH的项链
    luogu P2709 小B的询问
    排序
    算法基本概念
    金融的简单介绍
    Admin组件-----Django自带
    day02-菜单处理
    day01
    selenium常用方法
  • 原文地址:https://www.cnblogs.com/lautsie/p/3946755.html
Copyright © 2011-2022 走看看