zoukankan      html  css  js  c++  java
  • AtCoder Beginner Contest 057

    A题

    分析:24进制转换

     1 #include<iostream>
     2 using namespace std;
     3 int main()
     4 {
     5     int a,b;
     6     while(cin>>a>>b){
     7         cout<<(a+b)%24<<endl;
     8     }
     9     return 0;
    10 }
    View Code

    B题

    分析:求曼哈顿距离最近的点

     1 #include "iostream"
     2 #include "cstdio"
     3 #include "cstring"
     4 #include "string"
     5 #include "cmath"
     6 using namespace std;
     7 const int maxn=50+10;
     8 const long long INF=500000001;
     9 int n,m;
    10 int vis[maxn];
    11 typedef struct 
    12 {
    13     long long  x,y;
    14 }point;
    15 typedef struct{
    16     long long x,y;
    17     int num;
    18 }fun;
    19 point p[maxn];
    20 fun s[maxn];
    21 int main()
    22 {
    23     while(cin>>n>>m)
    24     {
    25         memset(vis,0,sizeof(vis));
    26         for(int i=1;i<=n;i++)
    27             scanf("%lld%lld",&p[i].x,&p[i].y);
    28         for(int i=1;i<=m;i++){
    29             scanf("%lld%lld",&s[i].x,&s[i].y);
    30             s[i].num=i;
    31         }
    32         for(int i=1;i<=n;i++){
    33             long long minx=INF;
    34             int k=0;
    35             for(int j=1;j<=m;j++){
    36                 long long t=abs(p[i].x-s[j].x)+abs(p[i].y-s[j].y);
    37                 if(t<minx){
    38                     minx=t;
    39                     k=j;
    40                 }
    41             }
    42             printf("%d
    ",k);
    43         }
    44     }
    45     return 0;
    46 }
    View Code

    C题

    分析:求所有两个相乘为N的数的最大位数的最小值

     1 #include "iostream"
     2 #include "cstdio"
     3 #include "cmath"
     4 using namespace std;
     5 const int INF=50;
     6 long long n;
     7 int solve(long long num){
     8     int cnt=0;
     9     while(num){
    10         cnt++;
    11         num/=10;
    12     }
    13     return cnt;
    14 }
    15 int main()
    16 {
    17     while(cin>>n){
    18         long long minx=INF;
    19         //cout<<solve(10000)<<endl;
    20         for(long long i=1;i*i<=n;i++){
    21             if(n%i==0){
    22                 long long t=max(solve(i),solve(n/i));
    23                 minx=min(minx,t);
    24             }
    25         }
    26         cout<<minx<<endl;
    27     }
    28 }
    View Code

    D题

    分析:首先我们按照从大到小进行排序,然后选取前a个,这样得出来的平均值一定是最大的。然后接着我们统计总共有多少个跟a相同的数,并统计在第a个数之前有多少个跟a相同的数,如果第1个数个数跟第a个相同,则为c[x][y],否则我们统计从a到b的组合数相加.注意求组合数的方法,很经典。

     1 #include "iostream"
     2 #include "cstdio"
     3 #include "cstring"
     4 #include "string"
     5 #include "cmath"
     6 #include "algorithm"
     7 #include "map"
     8 #include "set"
     9 #include "vector"
    10 #define eps 1e-6
    11 using namespace std;
    12 const int maxn=55;
    13 double s[maxn];
    14 long long c[maxn][maxn];
    15 int n,a,b;
    16 bool cmp(double x,double y){
    17     return x>y;
    18 }
    19 void init(){
    20     c[0][0]=1;
    21     for(int i=1;i<=n;i++){
    22         c[i][0]=1,c[i][i]=1;
    23         for(int j=1;j<i;j++)
    24             c[i][j]=c[i-1][j-1]+c[i-1][j];
    25     }
    26 }
    27 int main()
    28 {
    29     while(cin>>n>>a>>b){
    30         init();
    31         for(int i=0;i<n;i++)
    32             cin>>s[i];
    33         sort(s,s+n,cmp);
    34         double sum=0;
    35         for(int i=0;i<a;i++){
    36             sum+=s[i];
    37         }
    38         double h=sum/(double)a;
    39         int x=0,y=0;
    40         for(int i=0;i<n;i++)
    41             if(s[i]==s[a-1]){
    42                 x++;
    43                 if(i<a)
    44                     y++;
    45             }
    46         //cout<<x<<" "<<y<<endl;
    47         printf("%.6f
    ",h);
    48         if(s[0]!=s[a-1]){
    49             cout<<c[x][y]<<endl;
    50         }else{
    51             long long cnt=0;
    52             for(int i=a;i<=min(b,x);i++)
    53                 cnt+=c[x][i];
    54             cout<<cnt<<endl;
    55         }
    56         //printf("%d
    ",ans);
    57     }
    58     return 0;
    59 }
    View Code
  • 相关阅读:
    P4999 烦人的数学作业
    P3413 SAC#1
    P2657 [SCOI2009]windy数
    P2602 [ZJOI2010]数字计数
    JSOI2007 建筑抢修
    CF161B Discounts
    Description
    Street Numbers
    Pizza Cutting
    Supermean
  • 原文地址:https://www.cnblogs.com/wolf940509/p/6632706.html
Copyright © 2011-2022 走看看