Number Of Permutations

Posted 2462478392lee

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Number Of Permutations相关的知识,希望对你有一定的参考价值。

题目链接

题意:给你n个坐标,求组成序列的总数,其中x,y都不能升序。

思路:刚开始就想到了思路,但情况没有特判对。因为总共的序列有n!种,因为xy都不能升序,所以先给x,y分别排序,例如给x排升序,x里面的每一组重复的数的排列就是对于x来说不符合情况的种数,就应该减去每个重复的x个数的阶乘之积。y也是如此,但是你减去了可能重复的情况,那就是x,y都升序,且重复。所以还要加上这种情况算出来的种数。首先要特判一下有没有这种情况。代码上注释很清楚,上代码。

#include<cstring>
#include<algorithm>
#include<vector>
#include<map>
#include<queue>
#include<cstdio>
#include<cmath>
#define ll long long
#define lowbit(x) x&(-x)
using namespace std;
const int mod=998244353;
int n,i,j,m;
ll ans,p[300005],s;
struct point

    int x;
    int y;
a[300005];
bool cmp(point a,point b)

    if(a.x==b.x)
        return a.y<b.y;
    return a.x<b.x;

bool cmp2(point a,point b)

    return a.y<b.y;

int main()

    scanf("%d",&n);
    p[0]=1;
    for(i=1;i<=n;i++)
    
        scanf("%d %d",&a[i].x,&a[i].y);
        p[i]=p[i-1]*i%mod;
    
    ans=p[n];
    sort(a+1,a+1+n,cmp);
    int flag=0;
    for(i=2;i<=n;i++)
        if(!(a[i].x>=a[i-1].x&&a[i].y>=a[i-1].y))
            flag=1;//判断有没有重复减的情况。 
    if(!flag)
    
        //加上重复减的情况 。 
        s=1;
        for(i=1;i<=n;)
        
            for(j=i;j<=n&&a[i].x==a[j].x&&a[i].y==a[j].y;j++);
            s=s*p[j-i]%mod;
            i=j;
        
        ans+=s;
    
    s=1;
    //减去光按a[i].x的情况。 
    for(i=1;i<=n;)
    
        for(j=i;j<=n&&a[i].x==a[j].x;j++);
        s=s*p[j-i]%mod;
        i=j;
    
    ans-=s;
    sort(a+1,a+1+n,cmp2);
    s=1;
    //减去光按a[i].y的情况。 
    for(i=1;i<=n;)
    
        for(j=i;j<=n&&a[i].y==a[j].y;j++);
        s=s*p[j-i]%mod;
        i=j;
    
    ans-=s;
    printf("%lld\n",((ans%mod)+mod)%mod);//防止负数。

 

以上是关于Number Of Permutations的主要内容,如果未能解决你的问题,请参考以下文章

ValueError: The number of elements in ‘fill‘ does not match the number of bands of the image (3 != 4

Number of Islands

Leetcode 1577. Number of Ways Where Square of Number Is Equal to Product of Two Numbers

200. Number of Islands

LeetCode Number of Boomerangs

NiFi PutKudu错误:the number of replicas does not equal the number of servers解决方案