zoukankan      html  css  js  c++  java
  • Codeforces Gym 100463A Crossings 逆序数

    Crossings

    Time Limit: 20 Sec

    Memory Limit: 256 MB

    题目连接

    http://codeforces.com/gym/100463

    Description

    Given a permutation P of {0, 1, ..., n − 1}, we define the crossing number of it as follows. Write the sequence 0, 1, 2, . . . , n − 1 from left to right above the sequence P(0), P(1), . . . , P(n − 1). Draw a straignt line from 0 in the top line to 0 in the bottom line, from 1 to 1, and so on. The crossing number of P is the number of pairs of lines that cross. For example, if n = 5 and P = [1, 3, 0, 2, 4], then the crossing number of P is 3, as shown in the figure below. !""""#""""$""""%""""&" #""""%""""!""""$""""&" In this problem a permutation will be specified by a tuple (n, a, b), where n is a prime and a and b are integers (1 ≤ a ≤ n − 1 and 0 ≤ b ≤ n − 1). We call this permutation Perm(n, a, b), and the ith element of it is a ∗ i + b mod n (with i in the range [0, n − 1]). So the example above is specified by Perm(5, 2, 1).

    Input

    There are several test cases in the input file. Each test case is specified by three space-separated numbers n, a, and b on a line. The prime n will be at most 1,000,000. The input is terminated with a line containing three zeros.

    Output

    For each case in the input print out the case number followed by the crossing number of the permutation. Follow the format in the example output.

    Sample Input

    5 2 1 19 12 7 0 0 0

    Sample Output

    Case 1: 3 Case 2: 77

    HINT

    题意

    给你n个数,第i个数等于(a*i+b)%n,然后问你逆序数是多少

    题解:

    树状数组,大胆上

    代码

    //qscqesze
    #include <cstdio>
    #include <cmath>
    #include <cstring>
    #include <ctime>
    #include <iostream>
    #include <algorithm>
    #include <set>
    #include <vector>
    #include <sstream>
    #include <queue>
    #include <typeinfo>
    #include <fstream>
    #include <map>
    typedef long long ll;
    using namespace std;
    //freopen("D.in","r",stdin);
    //freopen("D.out","w",stdout);
    #define sspeed ios_base::sync_with_stdio(0);cin.tie(0)
    #define maxn 1000101
    #define mod 10007
    #define eps 1e-9
    const int inf=0x7fffffff;   //无限大
    /*
    inline ll read()
    {
        int x=0,f=1;char ch=getchar();
        while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
        while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
        return x*f;
    }
    */
    //**************************************************************************************
    int d[maxn];
    int c[maxn];
    ll n;
    int t;
    inline int read()
    {
        int x=0,f=1;char ch=getchar();
        while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
        while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
        return x*f;
    }
    int lowbit(int x)
    {
        return x&-x;
    }
    
    void update(int x,int y)
    {
        while(x<=n)
        {
            d[x]+=y;
            x+=lowbit(x);
        }
    }
    int sum(int x)
    {
        int s=0;
        while(x>0)
        {
            s+=d[x];
            x-=lowbit(x);
        }
        return s;
    }
    int num[maxn];
    ll a,b;
    int main()
    {
        int t=0;
        while(scanf("%lld%lld%lld",&n,&a,&b)!=EOF)
        {
            t++;
            if(n==0&&a==0&&b==0)
                break;
            memset(d,0,sizeof(d));
            ll ans=0;
            for(int i=0;i<n;i++)
            {
                int x=(a*i+b)%n+1;
                ans+=sum(x-1);
                update(x,1);
            }
            printf("Case %d: %lld
    ",t,(n-1)*n/2-ans);
        }
    }
  • 相关阅读:
    Win7 安装 IIS 7.5 及部署 .NET 程序到 IIS 的内容杂记
    乐嘉,你快回来
    AMD将要嫁他人?
    高精度运算(运算符重载)
    魔数卡牌
    C语言"#","#@"和"##"在宏定义中的使用技巧
    CentOS7下安装FTP服务
    Linux下FTP的安装和登陆
    怎么让FOXMAIL关了以后在右下角自动收取邮件
    在CentOS7上安装ftp服务器用于保存服务端上传的图片。
  • 原文地址:https://www.cnblogs.com/qscqesze/p/4665222.html
Copyright © 2011-2022 走看看