zoukankan      html  css  js  c++  java
  • D. Print a 1337-string...(组合数学)

    地址:https://codeforces.com/problemset/problem/1202/D

    题意:给出n,构造含有n个子1337的字符串。

    解析:本来想的是1.....1337的,但是看数据s=1e5,而n达到了1e9,显然不行。

    对于n的贡献,3是最大的,而7又是消耗最少的。所以可以构造133/777....../33......7

    对于第一组1337,7的个数即为可构造的种类数。

    第二组的末尾7,构造数取决于所有3的数目:x*(x-1)/2

    所以先算出x*(x-1)/2<=n的最大x,n-减去x*(x-1)/2即为需要补的中间7的数目,x-2即为去掉第一组3后需要打印的3的数目。

    最后结尾打个7。

    算了一下,这个不会超:

    3的个数x,对答案的贡献是x*(x-1)/2,考虑极端情况,n=1e9,x也就大概1e4.5而已。不够的用7去补就可以了,不会超1e5。

    #include<bits/stdc++.h>
    #include<map>
    using namespace std;
    typedef long long ll;
    int main()
    {
        int t;
        cin>>t;
        while(t--)
        {
            int n;
            cin>>n;
            cout<<"133";
            int b=1;
            while(b*(b-1)/2<=n)
            {
                b++;
            }
            b--;
            for(int i=1;i<=n-b*(b-1)/2;i++)
                cout<<"7";
            for(int i=1;i<=b-2;i++)
                cout<<"3";
            cout<<"7"<<endl;
        }
    }
  • 相关阅读:
    进程总结
    三大流程
    canvas简介
    时钟
    vim
    马拉车
    模拟退火
    洛谷P2055假期的宿舍
    洛谷P2320鬼谷子的钱袋.
    洛谷P2278操作系统
  • 原文地址:https://www.cnblogs.com/liyexin/p/12934492.html
Copyright © 2011-2022 走看看