zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    AxureRP的学习
    http状态码的含义
    10.mongoDB给所有文档添加字段
    ip正则匹配
    express使用socketIO,前后端跨域
    express后端配置,实现跨域
    https带来的express后台部署到服务器所引发的问题
    前台:VueSocketIOExt+socket.io-client,后台socket.io的聊天环境搭载
    即时通讯框架SocketIO
    9.mongoDB新增文档,若文档已存在,则不新增,若文档不存在,则新增
  • 原文地址:https://www.cnblogs.com/zzqc/p/12178278.html
Copyright © 2011-2022 走看看