• AtCoder Beginner Contest 150


    AB没啥好说的

    C - Count Order / 


    Time Limit: 2 sec / Memory Limit: 1024 MB

    Score : 300300 points

    Problem Statement

    We have two permutations PP and QQ of size NN (that is, PP and QQ are both rearrangements of (1, 2, ..., N)(1, 2, ..., N)).

    There are N!N! possible permutations of size NN. Among them, let PP and QQ be the aa-th and bb-th lexicographically smallest permutations, respectively. Find |ab||a−b|.

    Notes

    For two sequences XX and YYXX is said to be lexicographically smaller than YY if and only if there exists an integer kk such that Xi=Yi (1i<k)Xi=Yi (1≤i<k) and Xk<YkXk<Yk.

    Constraints

    • 2N82≤N≤8
    • PP and QQ are permutations of size NN.

    Input

    Input is given from Standard Input in the following format:

    NN
    P1P1 P2P2 ...... PNPN
    Q1Q1 Q2Q2 ...... QNQN
    

    Output

    Print |ab||a−b|.

    用康托展开,这里数据很小也可以直接STL跑next_permutation。。

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 #define LL long long
     4 
     5 int jc[10]={1};
     6 int a[10],b[10],n;
     7 int cal(int a[],int n){
     8     int res=0;
     9     for(int i=1;i<=n;++i){
    10         int c=0;
    11         for(int j=i+1;j<=n;++j)c+=(a[j]<a[i]);
    12         res+=c*jc[n-i];
    13     }return res;
    14 }
    15 int main(){
    16     for(int i=1;i<=9;++i)jc[i]=i*jc[i-1];
    17     cin>>n;
    18     for(int i=1;i<=n;++i)cin>>a[i];
    19     for(int i=1;i<=n;++i)cin>>b[i];
    20     cout<<abs(cal(b,n)-cal(a,n))<<endl;
    21     return 0;
    22 }

    D - Semi Common Multiple / 


    Time Limit: 2 sec / Memory Limit: 1024 MB

    Score : 400 points

    Problem Statement

    Given are a sequence A=a1,a2,......aNA=a1,a2,......aN of NN positive even numbers, and an integer MM.

    Let a semi-common multiple of AA be a positive integer XX that satisfies the following condition for every kk (1kN)(1≤k≤N):

    • There exists a non-negative integer pp such that X=ak×(p+0.5)X=ak×(p+0.5).

    Find the number of semi-common multiples of AA among the integers between 11 and MM (inclusive).

    Constraints

    • 1N1051≤N≤105
    • 1M1091≤M≤109
    • 2ai1092≤ai≤109
    • aiai is an even number.
    • All values in input are integers.

    Input

    Input is given from Standard Input in the following format:

    NN MM
    a1a1 a2a2 ...... aNaN
    

    Output

    Print the number of semi-common multiples of AA among the integers between 11 and MM (inclusive).

    X=ai*(p+0.5)可以看作是X=ai/2*(2p+1),令bi=ai/2的话,那么显然X满足X%bi==0且X/bi是个奇数。

    令g=lcm(b1,b2...bn)的话,满足条件的数只可能是k*g,假设g不满足题意那么k*g也不会满足题意(g不满足,即存在一个b使得g/b是偶数,那显然k*g/b也是偶数,也不符合)。

    假设g满足题意那么只有在k为奇数得情况下k*g满足题意,这时候统计下小于等于M且满足上述条件的数即可。

    还要注意求lcm得过程可能会爆LL,为此只要当前的lcm>M那么答案显然就是零了,特判下。

    这种数学规律题神烦,代码很丑= =

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 #define LL long long
     4 
     5 LL gcd(LL a,LL b){return b==0?a:gcd(b,a%b);}
     6 LL lcm(LL a,LL b){return a/gcd(a,b)*b;}
     7 LL N,M,a[100010];
     8 int main(){
     9     cin>>N>>M;
    10     LL g=1,ok=1;
    11     for(int i=1;i<=N;++i){
    12         cin>>a[i];
    13         a[i]/=2;
    14         if(i==1)g=a[i];
    15         g=lcm(g,a[i]);
    16         if(g>M)ok=0;
    17     }
    18     for(int i=1;i<=N;++i){
    19         if(g/a[i]%2==0){ok=0;break;}
    20     }
    21     if(!ok){
    22         cout<<0<<endl;
    23         return 0;
    24     }
    25     LL ans=0;
    26     LL b=M/g;
    27     ans=b/2;
    28     if(b&1)ans++;
    29     cout<<ans<<endl;
    30     return 0;
    31 }
  • 相关阅读:
    复利计算5.0
    读《构建之法》第4章有感
    实验二作业调度模拟程序
    观看与评价
    结对2.03
    做汉堡
    复利计算--结对
    《构建之法》第四章
    复利单利计算器单元测试
    实验一、命令解释程序的编写实验
  • 原文地址:https://www.cnblogs.com/zzqc/p/12178278.html
Copyright © 2020-2023  润新知