Gym - 101341M(简单模拟)

Gym - 101341M(简单模拟)

这道题想麻烦了,最开始的方法就是对的,没敢敲可还行hhh

#include <iostream>
#include <vector>
using namespace std;
const int N = 200000 + 10;
typedef long long ll;
ll sum = 0;
int a[N], n;
vector<int> v1, v2;
int main()
{
    
    
    scanf("%d", &n);
    for(int i=1;i<=n;i++)
    {
    
    
        scanf("%d", &a[i]);
        sum += a[i];
    }
    if(sum > n)
    {
    
    
        printf("NO\n");
        return 0;
    }
    int flag = 1;
    int pos = n;
    for(int i=n;i>=1;i--)
    {
    
    
        if(a[i] > 0)
        {
    
    
            for(int j=pos;j>=pos-a[i]+1;j--)
            {
    
    
                if(i >= j) flag = 0;
                v1.push_back(i);
                v2.push_back(j);
            }
        }
        pos = pos-a[i];
    }
    if(flag == 0)
    {
    
    
        printf("NO\n");
        return 0;
    }
    printf("YES\n");
    for(int i=0;i<v1.size();i++)
    {
    
    
        printf("%d %d\n", v1[i], v2[i]);
    }
}

猜你喜欢

转载自blog.csdn.net/qq_47783181/article/details/112856325