zoukankan      html  css  js  c++  java
  • HZAU-Training-11-4(for 2015th)

    A:

      多少a*a的正方形能够覆盖m*n的矩形。

      长用多少覆盖,宽用多少覆盖,向上取整乘起来。注意爆int

    1 #include <bits/stdc++.h>
    2 
    3 int main()
    4 {
    5     int n, m, a;
    6     scanf("%d%d%d", &n, &m, &a);
    7     printf("%lld
    ", (long long)( 1ll * ceil( 1.0 * n / a ) * ceil( 1.0 * m / a ) ) );
    8 }
    View Code

    B:

      1000以内只含有4,7的数组放到一个数组里面,对n,遍历数组,看有没有能整除n的。

     1 #include <bits/stdc++.h>
     2 
     3 int fac[] = {4, 7, 44, 47, 74, 77, 444, 447, 474, 477, 744, 747, 774, 777};
     4 
     5 int main()
     6 {
     7     int n;
     8     std::cin >> n;
     9     for (int i : fac) {
    10         if (n % i == 0) {
    11             printf("YES
    ");
    12             return 0;
    13         }
    14     }
    15     printf("NO
    ");
    16     return 0;
    17 }
    View Code

    C:

      火车n站,每站下车a人,上车b人,求火车最少能装多少人

      初始为0,每站先下后上,每一站统计一下车上有多少人,维护一个最大值就是答案。

     1 #include <bits/stdc++.h>
     2 
     3 
     4 int main()
     5 {
     6     int n;
     7     std::cin >> n;
     8     int res = 0, tmp = 0;
     9     for (int i= 1; i <= n; ++i) {
    10         int a, b;
    11         scanf("%d%d", &a, &b);
    12         tmp -= a;
    13         tmp += b;
    14         res = std::max(res, tmp);
    15     }
    16     printf("%d
    ", res);
    17 }
    View Code

    D:

      每个人的领导关系是一个树形结构。可能有多个人没有领导。建立一个虚拟的领导(0号employee)是这些没有领导的人的领导。

      从0开始dfs一遍树形结构,树的最大深度-1就是答案(减去一是因为减去虚拟的领导)。

     1 #include <bits/stdc++.h>
     2 
     3 std::vector<int> ve[2222];
     4 
     5 int dfs(int u)
     6 {
     7     int tmp = 0;
     8     for (int i = 0; i < (int)ve[u]. size(); ++i) {
     9         int v = ve[u][i];
    10         tmp = std::max(tmp, dfs(v));
    11     }
    12     return tmp + 1;
    13 }
    14 
    15 int main()
    16 {
    17     int n;
    18     std::cin >> n;
    19     for (int i= 1; i <= n; ++i) {
    20         int p;
    21         std::cin >> p;
    22         if (p == - 1)
    23             ve[0].push_back(i);
    24         else
    25             ve[p].push_back(i);
    26     }
    27     printf("%d
    ", dfs(0)-1);
    28 }
    View Code

    E:

      简单模拟。每个人可能拿的方法为2*100+2*20,1*100+12*20,22*20;第一个人尽量多拿100的,第二个人尽量多拿10的;

      设每人拿K个100的,则拿22-10*K个10的,第一个人拿时K从2枚举到0,满足X>K&&Y>22-10*K则X=X-K,Y=Y-22*K;第二个人拿时从K=0枚举到K=2,然后同理。

      若一个人枚举K时每种都不满足条件,他就输了。

     1 #include <bits/stdc++.h>
     2 
     3 using namespace std;
     4 
     5 int main()
     6 {
     7     int x,y;
     8     scanf("%d %d",&x,&y);
     9     for(int tt=1;1;tt=1-tt)
    10     {
    11         int k;
    12         if(tt)
    13         {
    14             if(x>=2)
    15                 k=2;
    16             else if(x==1)
    17                 k=1;
    18             else
    19                 k=0;
    20             x-=k;
    21             y-=(22-k*10);
    22         }
    23         else
    24         {
    25             if(y>=22)
    26                 k=0;
    27             else if(y>=12)
    28                 k=1;
    29             else k=2;
    30             x-=k;
    31             y-=22-10*k;
    32         }
    33         if(x<0||y<0)
    34         {
    35             if(tt)
    36                 printf("Hanako
    ");
    37             else
    38                 printf("Ciel
    ");
    39             break;
    40         }
    41     }
    42 
    43     return 0;
    44 }
    View Code

     

    F:

      判断给定两个数是不是相邻的质数即可。

     1 #include <bits/stdc++.h>
     2 
     3 using namespace std;
     4 
     5 bool judge(int n)
     6 {
     7     for(int i=2;i<n;i++)
     8         if(n%i==0)
     9         return false;
    10     return true;
    11 }
    12 
    13 int main()
    14 {
    15     int x,y;
    16     scanf("%d %d",&x,&y);
    17     int num=0;
    18     if(judge(x))
    19         num++;
    20     if(judge(y))
    21         num++;
    22     if(num==2)
    23     {
    24         for(int i=x+1;i<y;i++)
    25             if(judge(i))
    26                 num++;
    27     }
    28     if(num==2)
    29         printf("YES
    ");
    30     else
    31         printf("NO
    ");
    32     return 0;
    33 }
    View Code

    G:

      共N行,M列,则第X行,Y列的序号为(X-1)*M+Y;所查询的位置之前,每有一个Waste区域,序号-1,然后对3取模即可。

     1 #include <bits/stdc++.h>
     2 
     3 using namespace std;
     4 
     5 int vi[12345];
     6 
     7 int main()
     8 {
     9     int n,m,k,t;
    10     scanf("%d %d %d %d",&n,&m,&k,&t);
    11     for(int i=0;i<k;i++)
    12     {
    13         int a,b;
    14         scanf("%d %d",&a,&b);
    15         vi[i]=(a-1)*m+b;
    16     }
    17     sort(vi,vi+k);
    18     for(int i=0;i<t;i++)
    19     {
    20         int a,b;
    21         scanf("%d %d",&a,&b);
    22         int pos=(a-1)*m+b;
    23         int num=lower_bound(vi,vi+k,pos)-vi;
    24         //printf("num=%d
    ",num);
    25         if(pos==vi[num]){
    26             printf("Waste
    ");
    27             continue;
    28         }
    29         pos-=num;
    30         pos=pos%3;
    31         if(pos==1)
    32             printf("Carrots
    ");
    33         else if(pos==2)
    34             printf("Kiwis
    ");
    35         else if(pos==0)
    36             printf("Grapes
    ");
    37     }
    38     return 0;
    39 }
    View Code

    H:

      求两个数在给定区间上的公约数,没有输出-1;两个数的最大公约数的约数一定是这两个数的公约数,求出最大公约数(GCD)后枚举判断是否是GCD的约数,然后按照区间查询即可。

     1 #include <cstdio>
     2 #include <iostream>
     3 #include <algorithm>
     4 
     5 using namespace std;
     6 
     7 const int M = 1e6;
     8 int ma[M];
     9 
    10 int gcd(int a,int b);
    11 
    12 int main()
    13 {
    14     int a,b,n;
    15     int ans,to;
    16     int i;
    17     int ua,ub;
    18     int tp;
    19     while(~scanf("%d %d",&a,&b))
    20     {
    21         scanf("%d",&n);
    22         ans = gcd(a,b);
    23         to = 0;
    24         for(i= 1; i*i <= ans; i++)
    25         {
    26             if(ans % i == 0)
    27             {
    28                 ma[to++] = i;
    29                 if(i *i != ans)
    30                 {
    31                     ma[to++] = ans / i;
    32                 }
    33             }
    34         }
    35         sort(ma,ma + to);
    36         while(n--)
    37         {
    38             scanf("%d %d",&ua,&ub);
    39             tp = lower_bound(ma, ma + to, ub) - ma;
    40             if(ma[tp] > ub || tp == to)
    41             {
    42                 tp--;
    43             }
    44             if(ma[tp] < ua || ma[tp] > ub)
    45             {
    46                 printf("-1
    ");
    47             }
    48             else
    49                 printf("%d
    ",ma[tp]);
    50 
    51         }
    52     }
    53 return 0;
    54 }
    55 
    56 
    57 int gcd(int a,int b)
    58 {
    59     return b==0 ? a : gcd(b, a % b);
    60 }
    View Code

    I :

      给两个数,判断去掉所有0后加法是否正确。先算出原来两个数的和C,再把两个数的0都去掉,求和为D,判断C去掉0后是否与D相等。

     1 #include <bits/stdc++.h>
     2 
     3 int fun(int x)
     4 {
     5     int res = 0, tmp = 1;
     6     while (x) {
     7         if (x%10) {
     8             res += (x % 10 * tmp);
     9             tmp *= 10;
    10         }
    11         x /= 10;
    12     }
    13     return res;
    14 }
    15 
    16 int main()
    17 {
    18     int a, b;
    19     scanf("%d%d", &a, &b);
    20     puts(fun(a) + fun(b) == fun(a+b) ? "YES" : "NO");
    21 }
    View Code

    J:

      简单模拟。

     1 #include <bits/stdc++.h>
     2 
     3 using namespace std;
     4 
     5 int main()
     6 {
     7     int n,p,k;
     8     scanf("%d %d %d",&n,&p,&k);
     9     int x=p-k;
    10     int y=p+k;
    11     if(x>1)
    12         printf("<<");
    13     int i;
    14     for(i=max(x,1);i<=n&&i<=y;i++)
    15     {
    16         if(i>0)
    17             printf(" ");
    18         if(i==p)
    19             printf("(%d)",i);
    20         else printf("%d",i);
    21     }
    22     if(y<n)
    23         printf(" >>");
    24     printf("
    ");
    25     return 0;
    26 }
    View Code
  • 相关阅读:
    Laravel实用小功能
    _initialize() 区别 __construct()
    PHP websocket之聊天室实现
    原来PHP对象比数组用更少的内存
    PHP协程
    mongodb数据库的导出与导入
    我理解的数据结构(一)—— 数组(Array)
    Swoole 源码分析——Server模块之Worker事件循环
    PHP面试:说下什么是堆和堆排序?
    我理解的数据结构(二)—— 栈(Stack)
  • 原文地址:https://www.cnblogs.com/takeoffyoung/p/4939166.html
Copyright © 2011-2022 走看看