• 2015-2016 ACM-ICPC, NEERC, Northern Subregional Contest


    Time:

    Link


    A    solved by ym

    签到


    B

    题意

    地图中有'@'和'.'两种棋子, 我们希望构造一个最大为1000*1000的矩形, 使得这个矩形中恰好有'@'和'.'的联通块个数为x个和y个(x与y都是在[1,1000]之间的正整数)

    分析

    ym:czh构造的很好啊


    C

    题意

    按顺序给两个字符串,问取出第一个字符串的非空前缀和第二个字符串的非空后缀,问有多少个不同的字符串(长度都为[1,1e5]范围)

    分析

    ym:仔细分析(大力猜)一下,会发现如果第一个字符串和第二个字符串字符全不一样是n*m,存在相同的字符的话,最后answer即为n*m-第二个每个字符在第一个字符串出现的次数

    简单证明:对于一个a[i]==b[j]

    1,以a[i]为结尾,抛弃b[j],不以b[j]为开头

    2,不以a[i]为结尾,抛弃a[i],以b[j]为开头

    这两者形成的串是相同的,必然会出现本质不同串的个数+1


    D

    题意

    T([1,1000]组数据),对于每组数据,给你一个数n([1,1e18]),让你把n拆成若干个数(m个数,m是正整数)之和的形式,使得这m个数都是2^p*3^q这样的形式,因子中只有2和3,而且相互之间不是倍数关系。并输出

    分析

     ym:如果n可以表示为  a*2^p*3^q,那么一定是奇数且不为3,我们考虑对a进行拆分,我们可以从a中拿出3^x<=a ,最大的x,这样a - 3^x就为偶数了,但是a - 3^x不一定是满足要求的,所以还要继续对a - 3^x进行拆分,因为每次都是拆分成3的最大次方+偶数,所以拆分一定可以最终完成,得到最后的结果

    #include<bits/stdc++.h>
    #define ll long long
    using namespace std;
    
    long long n;
    vector<ll>q;
    
    int main()
    {
        freopen("distribution.in","r",stdin);
        freopen("distribution.out","w",stdout);
        int t;
        scanf("%d",&t);
        while(t--)
        {
            q.clear();
            scanf("%lld",&n);
            ll bei=1;
            while(1)
            {
                while(n%2==0) n/=2,bei*=2;
                while(n%3==0) n/=3,bei*=3;
    
                if(n==1)
                {
                    q.push_back(bei);
                    break;
                }
                else
                {
                    ll tmp=1;
                    while(tmp*3<=n) tmp*=3;
                    q.push_back(tmp*bei);
                    n-=tmp;
                }
            }
            printf("%d
    ",q.size());
            for(auto it:q)
                cout<<it<<' ';
            cout<<endl;
        }
    }

    E

    分析

    按题意模拟即可


    F

    Difficult


    G

    题意

    给你一个n个点m条边的有向无环图。 我们想要在其上最多添加k条边,使得   1,这个图依然保持为有向无环图。 2,其最小字典序的拓扑排序结果尽可能大。

    分析

     


    H

    分析

    按题意模拟即可


    I

    Difficult


    J

    题意

    有n([2,5e4])个点,排列在数轴上,坐标分别为1~n。我们要从起点1走到终点n,每走1单位的路耗费1单位时间。 我们可以选择购买单次电量最大支撑行程为1~n-1的电动车,每种电动车有一个价格p[i]。 然后在2~n-1的每个点都可以充电,每个点有一个充电时间d[i],每次充电一定可以充满。 

    分析

     ym:二分+单调队列+dp,留坑


    K

    Difficult


    L

    分析

    模拟即可


    Summary

    Ym:抖机灵(思维)专场???怎么打了一场一个算法都没用到啊

    Czh:

     

     

  • 相关阅读:
    C#学习笔记之——一些应用
    C#学习笔记之——面向对象编程
    C#学习笔记之——一些练习(包含了一些out的使用,string的使用,StringBuilder的使用,类的属性,最大公约数的求法,还有英雄,武器类的设置)
    C#学习笔记之——数据类型,引用参数,输出参数,数组参数,命名参数,可选参数
    C#学习笔记之——类、对象
    离散实践1
    计算机书籍
    2013年12月大学英语六级作文预测:挑战与改变
    TCP协议详解
    Uip学习简介及网址
  • 原文地址:https://www.cnblogs.com/Deadline/p/8997859.html
Copyright © 2020-2023  润新知