StarryCoding 算法小白周赛2 题解与代码(含视频题解)

05-13 1769阅读

比赛链接(含视频题解):https://www.starrycoding.com/contest/4

A题题解:

题目大意

给你一个由 n n n 个正整数组成的数组 a a a,询问这个数组是否是严格单调递增的。

StarryCoding 算法小白周赛2 题解与代码(含视频题解)

思路

因为他会按照“拜访时间安排表”的顺序拜访每一位好友,而无法成功拜访某一好友时,必定是出现靠后拜访的时间早于靠前拜访的,或者两次拜访的时间相同,所以问题的本质就是判断数组是否严格单调递增,也就是 a 1 > n; if (a(n)= 3)n++; cout T; while (T--) { int n; cin >> n; if (a(n) ai+1​ 且 a i − 1 = a i + 1 a_{i-1} = a_{i+1} ai−1​=ai+1​,时,我们应该删除 a i a_{i} ai​ 将 a i + 1 a_{i+1} ai+1​ 变为 a i + 1 + 1 a_{i+1} + 1 ai+1​+1。

  • 当 a i > a i + 1 a_i > a_{i+1} ai​>ai+1​ 且 a i − 1 > a i + 1 a_{i-1} > a_{i+1} ai−1​>ai+1​,时,由于我们将 a i a_{i} ai​ 删去后 a i + 1 a_{i+1} ai+1​ 仍然不合法,所以我们应该删除 a i + 1 a_{i+1} ai+1​。

    核心代码

    void solve() {
        int n, k = 0;
        cin >> n;
        vector a(n + 1, 0);
        for (int i = 1; i 
            cin > a[i];
        }
        int b = a[1];
        for (int i = 2; i 
            if (a[i]  b) {
                b = a[i];
                continue;
            }
            if (a[i] == b) {
                a[i]++;
                b = a[i];
            }
            else {
                k++;
                if (k == 2) {
                    cout 
                    b = a[i - 1];
                }
                else if (a[i] == a[i - 2]) {
                    a[i]++;
                    b = a[i];
                }
                else {
                    b = a[i];
                }
            }
        }
        cout 
    	int n, k;
    	std::cin  n >> k;
    	for(int i = 1; i 
    		for(int j = 1; j 
    			std::cin  a[i][j];
    		}
    	}
    	for(int i = 1; i 
    		for(int j = 1; j 
    			if(i == 1 && j == 1){
    				dp[1][1][a[1][1] % k] = 1;
    			}
    			for(int x = 0; x 
  • VPS购买请点击我

    文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

    目录[+]