zoukankan      html  css  js  c++  java
  • Codeforces 459(#261 (Div. 2) ) 解题报告

    A:给你一个正方形的两点,让你求其余亮点

    解法:乱搞

    解题代码:

     1 // File Name: a.cpp
     2 // Author: darkdream
     3 // Created Time: 2014年08月15日 星期五 23时24分04秒
     4 
     5 #include<vector>
     6 #include<list>
     7 #include<map>
     8 #include<set>
     9 #include<deque>
    10 #include<stack>
    11 #include<bitset>
    12 #include<algorithm>
    13 #include<functional>
    14 #include<numeric>
    15 #include<utility>
    16 #include<sstream>
    17 #include<iostream>
    18 #include<iomanip>
    19 #include<cstdio>
    20 #include<cmath>
    21 #include<cstdlib>
    22 #include<cstring>
    23 #include<ctime>
    24 #define LL long long
    25 
    26 using namespace std;
    27 
    28 int main(){
    29     int n , m ,n1,m1; 
    30     scanf("%d %d %d %d",&n,&m,&n1,&m1);
    31    // printf("%d %d %d %d
    ",n,m1,n1,m);
    32    if(n == n1)
    33    {
    34        printf("%d %d %d %d
    ",n+abs(m-m1),m,n1+abs(m-m1),m1);   
    35    }else if(m == m1){
    36        printf("%d %d %d %d
    ",n,m+abs(n-n1),n1 ,abs(n-n1)+m1);   
    37    }else {
    38       if(abs(n-n1) != abs(m-m1)) 
    39         {
    40           printf("-1
    ");
    41           return 0; 
    42         }
    43       printf("%d %d %d %d
    ",n,m1,n1,m);
    44    }
    45 return 0;
    46 }
    View Code

    B:求n个数中最大差值的总数

    解法:乱搞

    解题代码:

     1 // File Name: b.cpp
     2 // Author: darkdream
     3 // Created Time: 2014年08月15日 星期五 23时41分47秒
     4 
     5 #include<vector>
     6 #include<list>
     7 #include<map>
     8 #include<set>
     9 #include<deque>
    10 #include<stack>
    11 #include<bitset>
    12 #include<algorithm>
    13 #include<functional>
    14 #include<numeric>
    15 #include<utility>
    16 #include<sstream>
    17 #include<iostream>
    18 #include<iomanip>
    19 #include<cstdio>
    20 #include<cmath>
    21 #include<cstdlib>
    22 #include<cstring>
    23 #include<ctime>
    24 #define LL long long
    25 
    26 using namespace std;
    27 map<int,int>a;
    28 int main(){
    29    int n;
    30    a.clear();
    31    int mxnum = -1e9+1; 
    32    int minum = 1e9 + 1;
    33    int temp ;
    34    scanf("%d",&n);
    35    for(int i =1 ;i <= n;i ++)
    36    {
    37        scanf("%d",&temp);
    38        a[temp] = a[temp] + 1; 
    39        if(temp > mxnum)
    40          mxnum = temp ;
    41        if(temp < minum)
    42            minum = temp ;
    43    }
    44    printf("%d ",mxnum - minum);
    45    if(mxnum != minum)
    46    {
    47        printf("%lld
    ",1ll*a[mxnum]*a[minum]);
    48    }else {
    49        printf("%lld
    ",1ll*a[mxnum]*(a[mxnum] - 1)/2) ;
    50    }
    51 return 0;
    52 }
    View Code

    C:给你n个人,有k辆车,有d天d个景点,求怎么安排使得任意两人不能d天都同一辆车

    解法:可以知道一竖行的数字不能都相等,那这就是一个求d位k进制的数

    解题代码:

     1 // File Name: c.cpp
     2 // Author: darkdream
     3 // Created Time: 2014年08月16日 星期六 00时10分50秒
     4 
     5 #include<vector>
     6 #include<list>
     7 #include<map>
     8 #include<set>
     9 #include<deque>
    10 #include<stack>
    11 #include<bitset>
    12 #include<algorithm>
    13 #include<functional>
    14 #include<numeric>
    15 #include<utility>
    16 #include<sstream>
    17 #include<iostream>
    18 #include<iomanip>
    19 #include<cstdio>
    20 #include<cmath>
    21 #include<cstdlib>
    22 #include<cstring>
    23 #include<ctime>
    24 #define LL long long
    25 
    26 using namespace std;
    27 LL n ,k,d;
    28 int dp[1004][1004];
    29 int check()
    30 {
    31    LL t = 1;
    32    for(int i = 1;i <= d ;i ++)
    33    {
    34       t = t * k ; 
    35       if(t >= n)
    36           return 0 ;
    37    }
    38    printf("-1
    ");
    39    return 1;
    40 }
    41 int main(){
    42     scanf("%I64d %I64d %I64d",&n,&k,&d);
    43     if(check())
    44         return 0 ;
    45     for(int i =1;i <= d;i ++)
    46         dp[i][1] = 1; 
    47     int t = 0 ; 
    48     for(int i = 2;i <= n;i ++)
    49     {    
    50         t = 1 ; 
    51         for(int j = 1;j <= d;j ++)
    52         {
    53            t = dp[j][i-1] + t; 
    54            if(t == k+1)
    55            {
    56              dp[j][i] = 1; 
    57            }else {
    58              dp[j][i] = t;
    59            }
    60            t = t /(k+1);
    61         }
    62     }
    63     for(int i = 1;i <= d;i ++)
    64     {    
    65         for(int j = 1;j <= n;j ++)
    66           printf("%d ",dp[i][j]);
    67         printf("
    ");
    68     }    
    69     return 0;
    70 }
    View Code

    D:给你一个公式 f(i,j,x) 求的是 序列中 i 到 j 等于 x 数的个数 ,现在问你有多少 (1  <= i < j <= n) f(1,i,a[i]) > f(j,n,a[j])

    解法:树状数组,从后往前扫一遍,用map记录个数,再加一个辅助数组表示这个从后往前是第几个,然后再从前往后扫,map记录个数,每遍历到一个,就删除一个辅助数组的值,直接数状数组求和累加就行。

     1 // File Name: d.cpp
     2 // Author: darkdream
     3 // Created Time: 2014年08月16日 星期六 00时57分59秒
     4 
     5 #include<vector>
     6 #include<list>
     7 #include<map>
     8 #include<set>
     9 #include<deque>
    10 #include<stack>
    11 #include<bitset>
    12 #include<algorithm>
    13 #include<functional>
    14 #include<numeric>
    15 #include<utility>
    16 #include<sstream>
    17 #include<iostream>
    18 #include<iomanip>
    19 #include<cstdio>
    20 #include<cmath>
    21 #include<cstdlib>
    22 #include<cstring>
    23 #include<ctime>
    24 #define LL long long
    25 
    26 using namespace std;
    27 const int maxn = 1000010;
    28 map<int ,int >mp;
    29 map<int ,int >be;
    30 int a[maxn];
    31 int num[maxn];
    32 int n;
    33 int anst[maxn];
    34 int lowbit(int x)
    35 {
    36     return x &(-x);
    37 }
    38 void update(int x,int st)
    39 {
    40    while(x <= n)
    41    {
    42       anst[x] += st;
    43       x += lowbit(x);
    44    }
    45 }
    46 LL getsum(int x)
    47 {
    48   LL sum = 0 ; 
    49   while(x >= 1 )
    50   {
    51     sum +=  anst[x];
    52     x -= lowbit(x);
    53   }
    54   return sum;
    55 }
    56 int main(){
    57     scanf("%d",&n);
    58     int temp ; 
    59     mp.clear();
    60     be.clear();
    61     for(int i = 1;i <= n;i ++)
    62     {
    63         scanf("%d",&a[i]);
    64     }
    65     for(int i = n;i >= 1; i --)
    66     {
    67          int t= mp[a[i]];
    68          mp[a[i]]++;
    69          num[i] = t+1;
    70          update(t+1,1);
    71     }
    72     LL ans = 0 ; 
    73     for(int i = 1;i <= n;i ++)
    74     {
    75         int t = be[a[i]];
    76         update(num[i],-1);
    77         be[a[i]] = t + 1; 
    78         //printf("%I64d
    ",getsum(t));
    79         ans += getsum(t);
    80     }
    81     printf("%I64d
    ",ans);
    82     return 0 ;
    83 }
    View Code
    没有梦想,何谈远方
  • 相关阅读:
    Dockerfile常用指令
    Maven相关命令
    CI-CD平台搭建过程整理
    边工作边刷题:70天一遍leetcode: day 28-1
    边工作边刷题:70天一遍leetcode: day 28
    边工作边刷题:70天一遍leetcode: day 29-1
    边工作边刷题:70天一遍leetcode: day 29
    边工作边刷题:70天一遍leetcode: day 30-1
    边工作边刷题:70天一遍leetcode: day 30
    边工作边刷题:70天一遍leetcode: day 31-4
  • 原文地址:https://www.cnblogs.com/zyue/p/3916857.html
Copyright © 2011-2022 走看看