• CF 660A&B


    CF 660 A&B

    博客图片

    A. Captain Flint and Crew Recruitment

    CF 660A

    题目概述

    题目中定义了一个nearly prime的东西,是两个素数的乘积,现在给出一个正整数,要求把它分成4个不同的正整数和的形式,其中至少3个数是nearly prime,如果可以分成,输出YES病输出一种可行的结果;如果不可能,输出NO.

    思路

    先计算出最小的3个nearly prime数,分别是6,10,14然后只要这个输入的数据n大于30就可以分成这样4个正整数和的形式,因为要求这4个数必须都不相同,所以对于6+10+14+6=36,6+10+14+10=40,6+10+14+14=44这3中情况特殊处理,找出一组可行解.

    代码实现

    /*
     * @Author: Shuo Yang
     * @Date: 2020-07-30 21:48:14
     * @LastEditors: Shuo Yang
     * @LastEditTime: 2020-07-30 23:04:03
     * @FilePath: /Code-practice-master/CF/660/A.cpp
     */ 
    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int N = 1e5+5;
    ll buf[N] = {0};
    
    void solve(){
        
    }
    
    
    int main(int argc, const char** argv) {
        int t;
        cin>>t;
        while(t--){
            int n;
            cin>>n;
            if(n > 30 ){
                cout<<"YES"<<endl;
                if(n == 36 || n == 44 || n == 40){
                    if(n == 36){
                        cout<<"5 6 10 15
    ";
                    }else if( n == 44){
                        cout<<"6 10 13 15
    ";
                    }else{
                        cout<<"6 10 15 9
    ";
                    }
                }else{
                    cout<<"6 10 14 "<<(n-30)<<endl;
                }
            }else{
                cout<<"NO"<<endl;
            }
        }
        return 0;
    }
    

    刚开始时看漏了一个条件,忘记4个数必须不同这个约束,然后WA,然后特判把6+10+14+10算成了50WA了一次,直到第三次才通过Pretests,不知道最后会不会FST.

    B. Captain Flint and a Long Voyage

    CF 660B

    题目概述

    给出一个(n)位的正整数(x),把它按8421BCD码的形式展开去掉前导0,得到一个数(k),然后把这个数(k)的后面(n)位删掉,得到一个数(r).现在给出位数(n),计算这个最小的正整数(x),使得展开的数(k)删掉最后面的(n)位后得到的数(r)最大.

    解题思路

    因为展开的位的表现形式是没有前导0的,所以最后删除的部分应该尽可能的长,是1xxx的形式,因为原来的每一位都是十进制数,所以要删除的尾部应该是1000这样的,而前面的部分应该尽可能的大,也就是前面都应该是111这种位形式,所以最后满足的结果应该是(999cdots888)这样的,其中8的个数通过(lceil n/4 ceil)计算得到,9的个数通过(n-lceil n/4 ceil)得到,然后把两部分拼接,就是最终的结果.

    代码实现

    /*
     * @Author: Shuo Yang
     * @Date: 2020-07-30 21:46:06
     * @LastEditors: Shuo Yang
     * @LastEditTime: 2020-07-30 23:42:26
     * @FilePath: /Code-practice-master/CF/660/B.cpp
     */ 
    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int N = 1e5+5;
    ll buf[N] = {0};
    
    void solve(){
        
    }
    
    int main(int argc, const char** argv) {
        int t;
        cin>>t;
        while(t--){
            int n;
            cin>>n;
            int x = (n+3)/4;
            string ans = string(n-x,'9')+string(x,'8');
            cout<<ans<<endl;
        }
        return 0;
    }
    

    其它

  • 相关阅读:
    BZOJ.1034.[ZJOI2008]泡泡堂(贪心)
    BZOJ.4247.挂饰(背包DP)
    Codeforces.1040E.Network Safety(思路 并查集)
    LOJ.2863.[IOI2018]组合动作(交互)
    BZOJ.3624.[APIO2008]免费道路(Kruskal)
    BZOJ.4237.稻草人(CDQ分治 单调栈)
    BZOJ.3551.[ONTAK2010]Peaks加强版(Kruskal重构树 主席树)
    BZOJ.4946.[NOI2017]蔬菜(贪心 离线)
    BZOJ.2660.[BJOI2012]最多的方案(DP)
    BZOJ.3994.[SDOI2015]约数个数和(莫比乌斯反演)
  • 原文地址:https://www.cnblogs.com/2018slgys/p/13407428.html
Copyright © 2020-2023  润新知