zoukankan      html  css  js  c++  java
  • 校内试题 6月25日

    这个难度有点迷,..我就捋一下顺序然后说吧,这个题目难度不是按照T题的日常难度来排的,我就顺便排一下..
    暴0不开心 什么时候我能够AK一次呢 qwqq

    CCL 的消遣(CCL)
    [题目描述]
    AS we know,CCL 是一个很无聊很无聊很无聊的人.有一天,CCL 注意到地面上有很多棍子,
    于是,CCL 决定用这些棍子来消磨时间(这是要有多无聊啊).
    CCL先将这些棍子排成一排.每根棍子有一个长度.CCL一次可以将2个相邻的棍子合并成
    一根更长的棍子,合并出的棍子的长度为原来 2 根棍子的长度之和(具体的过程请参考样
    例).CCL 想用最少的合并次数来将这些棍子变成一个长度不降的序列.
    [输入格式]
    输入文件的第一行有一个正整数 n,表示棍子的数目.
    接下来一行 n 个正整数,依次表示每根木棍的长度.
    [输出格式]
    输出文件一行仅一个数,表示最少的合并次数.
    [样例输入]
    5
    8 2 7 3 1
    [样例输出]
    3
    [样例解释]
    最优方案是将后 4 根木棍合并,形成一个长度为 13 的棍子,共需要 3 次合并操作.
    合并后的序列为:8,13.
    [数据范围]
    10%的数据,N<=1500
    20%的数据,N<=5000
    50%的数据,N<=200000
    100%的数据,N<=1000000,每根棍子的长度<=maxlongint

    暴力过10分.. 那就写正解好了

    #define fre yes
    
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    using namespace std;
    
    const int maxn = 1000005;
    long long arr[maxn];
    long long w[maxn],f[maxn],c[maxn];
    
    long long n,k,ans;
    
    template<typename T>inline void read(T&x)
    {
        x = 0;char c;int lenp = 1;
        do { c = getchar();if(c == '-') lenp = -1; } while(!isdigit(c));
        do { x = x * 10 + c - '0';c = getchar(); } while(isdigit(c));
         x *= lenp;
    }
    
    int main()
    {
    #ifdef fre
        freopen("CCL.in","r",stdin);
        freopen("CCL.out","w",stdout);
    #endif
        memset(f,0x3f3f3f3f,sizeof(f));
    
        read(n);
        for (int i=1;i<=n;i++)
        {
            int x;
            read(x);
            arr[i] = x;
            arr[i] = arr[i-1] + arr[i];
        }
        
        long long l = 1,r = 1; f[0] = 0; w[0] = 0;
        for (int i=1;i<=n;i++)
        {
            while(l < r && arr[i] >= f[w[l+1]]) l++;
            f[i] = arr[i] - arr[w[l]] + arr[i];
            c[i] = c[w[l]] + i - w[l] - 1;
            while(r > l && f[i] <= f[w[r]]) r--;
            w[++r] = i;
        } printf("%lld
    ",c[n]);
        return 0;
    }
    

    春宵的烦恼(CWX) [题目描述] 春宵有一个烦恼:他的手太粗了!!!每次春宵想打开一个灯,他会把周围的 2 个灯的开关 (共 3 个开关)也按到.于是,为了打开一个灯,春宵需要多做许多操作,才能够将灯打开. 春宵很聪明,他总能找到一个方法使灯从一种初始状态转化为目标状态.但是春宵不知道 有没有更快捷的方法来达到目标状态.春宵也常常为此苦恼. 为了帮助春宵脱离苦海,请你写一个程序帮春宵找到从一种初始状态转化到一个结束状 态的最少的按开关的次数. [输入格式] 输入数据有多组测试数据. 输入第一行为一个正整数 t,表示测试数据的组数. 接下来 2*t 行,第 2*i-1 行是一个长度为 30 的 01 串,表示初始状态,第 2*i 行是一个长度为 30 的 01 串,表示结束状态.每两个数字间用一个空格隔开. [输出格式] 输出文件共 t 行.每行一个正整数表示最少的步数. [样例输入] 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 [样例输出] 2 0 4 [样例解释] case1: 春宵可以按最左边和最右边的两个开关,这样会同时按到第1,2,29,30个灯的开关,从而达 到目标状态 Case2: 初始状态即为目标状态,春宵什么也不需要做. Case3: 春宵可以按第 2,4,27,29 个开关,从而达到目标状态. [数据约定] 30%的数据,01 串的后 20 位是 0. 60%的数据,01 串的后 10 位是 0. 100%的数据,T<=20. [提示] 第一个灯的状态只与第 1,2 个开关有关,最后一个灯的状态只与最后两个开关有关. 输入数据保证有解.
    DRJ 的跃迁(DRJ) [题目描述] 在一个无限大的平面上有若干个 DRJ,每个 DRJ 都处于一个确定的点上.一个点上可能有 多个 DRJ.为了方便起见,我们将某一个 DRJ 所在的位置标为(0,0),所有的 DRJ 所处的位置恰好 都是整点(坐标为整数).我们称所有的 DRJ 所处位置构成的多元组为一个分布,用 S 来表示. 当一个 DRJ 处于不同的位置时,他会拥有不同的势能.在同一位置的两个 DRJ 的势能相等. 一个处于高能状态的 DRJ 可以通过跃迁到达低能状态,一个处于低能状态的 DRJ 也可以通过 跃迁到达高能状态.在跃迁的过程中势能的总量总是不变的. 一般地,我们设一个 DRJ 在(x,y)上的势能为 W[X,Y],那么有: (1) w[x,y]=w[x-1,y-1]+w[x-1,y] (2) w[x,y]=w[x-1,y-1]+w[x,y-1] (3) 若干势能之和为 A 的 DRJ 可以通过不断跃迁转化为任意分布的势能之和为 A 的 DRJ 例如,如果初始状态在点(10,10)上有一个 DRJ,那么他可以通过跃迁转化成一个位于(9,9) 的 DRj 和一个位于(9,10)的 DRJ.如果初始状态在点(9,9)和点(10,9)上分别有一个 DRJ,则他们可 以通过跃迁转化成一个位于点(10,10)的 DRJ. 为了研究 DRJ 之间的相互关系,我们称一对等价分布为一对可以通过跃迁而相互转化的 分布,一组 DRJ(简称 S)的 K 类分布(简称 K-S)是这样的一种分布: (1)K-S 与 S 是等价分布. (2)K-S 中所有的 DRJ 都在 Y=K 这条直线上. (3)K-S 中相邻两个整点上的 DRJ 不超过 1 个. 例如,((5,0),(4,1))的 1-S 分布为((5,1)). 很明显,当 k 确定时,一个分布 S 所对应的 K 类分布是唯一的.你的任务是对于给定的分布 S,求出 0-S. [输入格式] 输入文件的第一行为一个正整数 N,表示平面上有 N 个点上有 DRJ. 接下来有 N 行,每行三个整数 xi,yi,si,表示第 i 个点的坐标及位于 i 点上的 DRJ 的数量. 输入数据给出的第一个点的坐标是(0,0). [输出格式] 输出文件仅一行,包含若干个以空格隔开的整数.第 i 个整数 Ai 表示在 0-S 分布中,(Ai,0) 上有一个 DRJ.应注意这些整数应该以递增的顺序输出. [样例输入] 3 0 0 1 4 -1 1 4 0 1 [样例输出] 0 5 [样例解释] 第二,三个 DRJ 可以通过跃迁转化为 1 个位于(5,0)的 DRJ,这时所有的 DRJ 的分布状态是一 个合法的 0-S 分布,两个 DRJ 的位置分别为(0,0)和(5,0). [数据范围] 对于所有数据,N<=10000,Xi+Yi<=10000,Si<=10^8 输入数据保证合法.
  • 相关阅读:
    php类型运算符
    今天我开始写自己的东西
    挑选简历
    SQL Server和Oracle数据库索引介绍
    排序算法分析与设计实验
    软件框架 转
    【转】Ajax的原理和应用
    Web Service
    [转]异地分布式敏捷软件开发(Distributed Agile Software Development)
    [转]如何有效的使用C#读取文件
  • 原文地址:https://www.cnblogs.com/Steinway/p/9226374.html
Copyright © 2011-2022 走看看