其他分享
首页 > 其他分享> > P1338 末日的传说,P1372 又是毕业季I——贪心

P1338 末日的传说,P1372 又是毕业季I——贪心

作者:互联网

一个1到n序列,合理排序逆序对数要求是m,而且字典序要求最小;

 

这个题,因为数字只能用一次,所以我们可以知道什么位置放什么数逆序对的个数会增加或减少多少;

先求出最多能产生的数量,每次先输出最小的数,用总数减去减少的逆序对数;

如果不够的时候就要用大数排在前面;

vector,记得输出一个删一个;

 

#include<cstdio>
#include<vector>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
ll n,m;
ll now;
vector<ll> v;
int main()
{
    scanf("%lld%lld",&n,&m);
    for(ll i=1;i<=n;i++) v.push_back(i);
    ll s=n*(n-1)/2;
    for(int i=n-1;i>=0;i--)
    {
        s-=i;
        if(m>s)
        {
            now=m-s;
            m=s;
        }
        else now=0;
        printf("%lld ",v[now]);
        v.erase(v.begin()+now);
    } 
    return 0;
}

 

又是毕业季我什么也不想说

1到n这些数中,找到k个,使他们的GCD最大,输出GCD;

 

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,k;
int main()
{
    scanf("%d%d",&n,&k);
    printf("%d",n/k);
    return 0;
}

 

标签:P1372,now,int,ll,P1338,printf,逆序,include,贪心
来源: https://www.cnblogs.com/WHFF521/p/11544733.html