zoukankan      html  css  js  c++  java
  • 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;
    }
    

    其它

  • 相关阅读:
    使用ajax和window.history.pushState无刷新改变页面内容和地址栏URL
    URL中“#” “?” &“”号的作用
    JavaScript中事件捕获(Event capturing)-------------->由外向内,事件冒泡(Event bubblin)---------->由内向外
    单页面应用程序案例
    【344】Jupyter relevant problems
    【343】MathJax、LaTex、Mathml 数学公式
    【342】Linear Regression by Python
    【341】Numpy 相关应用
    【340】GIS related knowledge
    java中通过反射获取方法并且调用(getMethod和invoke深入)实践
  • 原文地址:https://www.cnblogs.com/2018slgys/p/13407428.html
Copyright © 2011-2022 走看看