1. 程式人生 > >codeforces div2 525 部分題解

codeforces div2 525 部分題解

A. Ehab and another construction problem

題目:

傳送門A

按照題目的要求,只需要將輸入的x列印兩遍就可以了。

注意還有x=1的情況,這樣只需要列印-1即可。

 

程式碼如下:

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
int main()
{
    int x;
    scanf("%d",&x);
    if(x==1)
    {
        printf("-1\n");
    }
    else
    {
        printf("%d %d\n",x,x);
    }
    return 0;
}

 B. Ehab and subtraction

題目:

傳送門B

此題模擬即可。

可以發現,一個數只需要減去前一個數就是要處理的結果。

程式碼如下:

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
const int maxn=1e5+5;
int a[maxn];
int n,k;
int main()
{
    scanf("%d%d",&n,&k);
    for (int i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
    sort(a,a+n);
    int j=0,rest=0;
    for (int i=0;i<k;)
    {
        if(j<n&&a[j]-rest)
        {
            i++;
            printf("%d\n",a[j]-rest);
            rest=a[j++];
        }
        else if(j<n&&a[j]-rest==0)
        {
            j++;
        }
        else if(j>=n)
        {
            i++;
            printf("0\n");
        }
    }
    return 0;
}

 C. Ehab and a 2-operation task

題目:

傳送門C

此題模擬即可,從後往前調到想要的數即可。

程式碼如下:

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
const int maxn=2005;
typedef long long ll;
int n;
ll a[maxn];
ll sum=0;
vector<int>ans,ans2;
int main()
{
    scanf("%d",&n);
    for (int i=0;i<n;i++)
    {
        scanf("%lld",&a[i]);
    }
    ll stand;
    if(a[n-1]<n+1)
    {
        stand=n+1;
    }
    else
    {
        stand=a[n-1]+1;
    }
    for (int i=n-1,j=stand-1;i>=0;i--,j--)
    {
        if((a[i]+sum)%stand!=j)
        {
            ll t=(a[i]+sum)%stand;
            ll yu=(t/stand+1)*stand+j-t;
            ans.push_back(yu);
            ans2.push_back(i+1);
            sum+=yu;
        }
    }
    printf("%d\n",ans.size()+1);
    for (int i=0;i<ans.size();i++)
        {
            printf("1 %d %d\n",ans2[i],ans[i]);
        }
    printf("2 %d %d\n",n,stand);
    return 0;
}