zoukankan      html  css  js  c++  java
  • Codeforces Round #615 (Div. 3)

    题目链接:http://codeforces.com/contest/1294

    A. Collecting Coins

    题意:有个人有n硬币,要分给a,b,c,三个人,使得这三个人硬币相同,这三个人已经有的硬币数量给出

    思路:将n与这三个人硬币数量相加模3,判断是否为0即可,注意分后这三个人的硬币数量不能比以前还少

     1 // 
     2 // Created by HJYL on 2020/1/14.
     3 //
     4 #include <stdio.h>
     5 #include <iostream>
     6 #include <algorithm>
     7 #include <cmath>
     8 #include <vector>
     9 #include <string>
    10 #include <cstring>
    11 #include <iomanip>
    12 using namespace std;
    13 const int maxn=100+10;
    14 typedef long long ll;
    15 int main()
    16 {
    17     int T;
    18     scanf("%d",&T);
    19     while(T--)
    20     {
    21         ll a,b,c,n;
    22         cin>>a>>b>>c>>n;
    23         ll d=a+b+c+n;
    24         if(d%3==0&&d/3>=a&&d/3>=b&&d/3>=c)
    25            printf("YES
    ");
    26         else
    27             printf("NO
    ");
    28     }
    29     return 0;
    30 }

    B - Collecting Packages

    题意:一个人要拿n个包裹,这些包裹放在坐标上,要求他只能右走或者上走,问是否有一条路线能全部拿到包裹,能输出字典序最小的,不能就输出“NO”

    思路:将点按照横坐标排序,R字典序比U小,字典序最小就是优先走右,如果排序后下一个点的纵坐标比之前的小,那么就不满足,否则就遍历点,优先R遍历

     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<stdlib.h>
     4 #include<time.h>
     5 #include<iostream>
     6 #include<algorithm>
     7 using namespace std;
     8 const int maxn=1000+100;
     9 struct Point{
    10     int x,y;
    11     bool operator<(const Point &other)const{
    12         if(this->x==other.x)
    13             return this->y<other.y;
    14         return this->x<other.x;
    15     }
    16 };
    17 int main()
    18 {
    19     int T;
    20     scanf("%d",&T);
    21     while(T--)
    22     {
    23         int n;
    24         scanf("%d",&n);
    25         Point p[maxn];
    26         for(int i=0;i<n;i++)
    27         {
    28             scanf("%d%d",&p[i].x,&p[i].y);
    29         }
    30         sort(p,p+n);
    31         bool flag=false;
    32         for(int i=1;i<n;i++)
    33         {
    34             if(p[i].y<p[i-1].y)
    35             {
    36                 flag=true;
    37                 break;
    38             }
    39         }
    40         if(flag)
    41             printf("NO
    ");
    42         else{
    43             printf("YES
    ");
    44             int xx=0,yy=0;
    45             for(int i=0;i<n;i++)
    46             {
    47                 while(xx<p[i].x)
    48                 {
    49                     printf("R");xx++;
    50                 }
    51                 while(yy<p[i].y)
    52                 {
    53                     printf("U");yy++;
    54                 }
    55             }
    56             printf("
    ");
    57         }
    58  
    59     }
    60     return 0;
    61 }

    C - Product of Three Numbers

    题意:给你一个数,问是否有三个不相同的数之积为它,有就输出这三个数

    思路:分解质因子,需要一个好板子

                1.如果质因子只有一个的话,判断它的次数,如果大于6的话,就满足,例如六个2,就可以分成2,4,8,如果次数没有6那么就不满足

                2.质因子有两个的话,判断指数之和是否大于3,只有大于三,才会满足,否则也是不满足

                3.质因子三个以上的话,输出前两个和n除以这俩个数之积即可

     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<stdlib.h>
     4 #include<time.h>
     5 #include<iostream>
     6 #include<algorithm>
     7 using namespace std;
     8 const int MAXN = 1e5;
     9 typedef long long ll;
    10 int p[MAXN + 5], ptop;
    11 int pn[MAXN + 5];
    12  
    13 void sieve() {
    14     long long n = MAXN;
    15     pn[1] = 1;
    16     for(int i = 2; i <= n; i++) {
    17         if(!pn[i])
    18             p[++ptop] = i;
    19         for(int j = 1; j <= ptop; j++) {
    20             int t = i * p[j];
    21             if(t > n)
    22                 break;
    23             pn[t] = p[j];
    24             if(i % p[j] == 0)
    25                 break;
    26         }
    27     }
    28 }
    29  
    30 int fac[105][2], ftop;
    31  
    32 void get_fac(int n) {
    33     ftop = 0;
    34     for(int i = 1; i <= ptop; ++i) {
    35         if(n % p[i] == 0) {
    36             fac[++ftop][0] = p[i];
    37             fac[ftop][1] = 0;
    38             while(n % p[i] == 0) {
    39                 n /= p[i];
    40                 ++fac[ftop][1];
    41             }
    42         }
    43     }
    44     if(n > 1) {
    45         fac[++ftop][0] = n;
    46         fac[ftop][1] = 1;
    47     }
    48 }
    49 int main()
    50 {
    51     int T;
    52     sieve();
    53     scanf("%d",&T);
    54     while(T--) {
    55  
    56         int n;
    57         cin >> n;
    58         get_fac(n);
    59         //cout<<ftop<<endl;
    60         if (ftop >= 3) {
    61             printf("YES
    %d %d %d
    ", fac[1][0], fac[2][0], n / fac[1][0] / fac[2][0]);
    62         } else if (ftop == 1) {
    63             if (fac[1][1] >= 6)
    64                 printf("YES
    %d %d %d
    ", fac[1][0], fac[1][0] * fac[1][0], n / fac[1][0] / fac[1][0] / fac[1][0]);
    65             else
    66                 printf("NO
    ");
    67         } else {
    68             if (fac[1][1] + fac[2][1] <= 3)
    69                 printf("NO
    ");
    70             else
    71                 printf("YES
    %d %d %d
    ", fac[1][0], fac[2][0], n / fac[1][0] / fac[2][0]);
    72         }
    73     }
    74     return 0;
    75 }
  • 相关阅读:
    【转载】关于nginx以及内核参数的配置
    【转载】Oracle 中count(1) 、count(*) 和count(列名) 函数的区别
    【转载】GET和POST两种基本请求方法的区别
    Eureka的使用
    【转载】Spring Cloud全家桶主要组件及简要介绍
    java阶段学习目标
    【转载】java对象和byte数组互转,直接拿去用
    【转载】非对称加密过程详解(基于RSA非对称加密算法实现)
    Python 四种数值类型(int,long,float,complex)区别及转换
    Python2和Python3中print的不同点
  • 原文地址:https://www.cnblogs.com/Vampire6/p/12231618.html
Copyright © 2011-2022 走看看