• 2016 USP-ICMC


    Time:2018.4.11  2:20-6:00  

    Link


    A Giant Snail Maze

    题意

     

    分析

    ym:从里向外dpdp,转移时维护前缀minmin正反转两圈。待补


    B Martian Sunrise   sole  by  ym  sole by czh

    题意

    给出n种音调,一种音调由7个音阶构成,一个音乐家可以演奏2种音调,现给出有一个很长的曲子共有m个音阶,一个音乐家可以演奏其中连续的一段,问最少需要多少个音乐家

    (n<=16,m<=1e5)

    分析

    ym:将所有情况枚举出来,从左到右贪心的取即可,时间复杂度(n^2*m)

    czh:从一到ans枚举音乐家的谱子


    C Sleep Buddies    solved by ym&czh

    分析

    直接对每一个集合的数看做二进制的位,最多只有2^10,枚举数字算贡献即可,小数注意精度eps,时间复杂度O(2^10*2^10*10)


    D Interstellar Love

    Difficult


    E Mars Explorer

    题意

     

    分析

    ym:正着走拿物品不会更优,因此先正着走到最远处,往回走的时候再考虑拿,bitsetbitset优化背包,需要注意自身重量。待补


    F  Bandejao      solved by czh&ym

    签到


    G Job List

    题意

     

    分析

    模拟 


    H Reporting on Mars       solved by ym&czh

    题意

    实质上给n个-1/1的序列,要求每个连续的k个数的乘积都为正数,可以对任意数进行修改,问最少修改的次数

    分析

     赛时:贪心wa的结束

     赛后:实施证明贪心确实容易漏情况

                简单推导发现下标 mod 同余的位置符号相同,可以预处理出每类位置取正或者取负的代价,然后简单dp即可

                dp[i][0/1]:前i个位正数/负数的最优解


    I Lazy Painting       solved by ym&czh

    题意

    给一个有n×m个格子的网格,给出一个H×W的矩形,现给出q条操作,每条操作给出当前操作的左上角的格子坐标为(ri,ci)为矩形的涂色,若左边界全涂色则不进行任何涂色,若未被全部涂色,则从左边界为染色的格子出发开始在矩形内染未染色的格子  1 ≤ N, M ≤ 105 and 1 ≤ N * M ≤ 3 * 106,(1 ≤ H ≤ N1 ≤ W ≤ M) ,q (1 ≤ q ≤ 105), (1 ≤ ri ≤ N - H + 1, 1 ≤ ci ≤ M - W + 1)

    分析

    数据范围过大,若想开数组需考虑用vector动态开二维数组

    显然对每一个询问暴力从左边界bfs修改会爆炸

    主要问题是如何解决被涂色的点呗被重复询问,可以对于每一列开一个set,1~n从小到大编号,染色的格子删掉,每次二分查找左边界未涂色的格子,从其出发dfs

    (erase中指针被删除会失效)

    时间复杂度O(n*mlognlogn)

    #include<bits/stdc++.h>
    using namespace std;
    int dx[5]={1,-1,0,0};
    int dy[5]={0,0,1,-1};
    
    
    const int maxn = 2e5+7;
    
    set<int>pos[maxn];
    int sum;
    int n,m,h,w,q,x,y;
    int xx, yy;
    
    void dfs(int a, int b)
    {
        if(a<x||a>xx||b<y||b>yy||pos[b].count(a)==0)
            return;
        pos[b].erase(a);
        sum--;
        for(int i=0;i<4;i++)
        {
            dfs(a+dx[i], b+dy[i]);
        }
    
    }
    
    int main()
    {
        scanf("%d%d%d%d%d", &n, &m, &h, &w, &q);
        for(int i=1;i<=m;i++)
        {
            for(int j=1;j<=n;j++)
            {
                pos[i].insert(j);
            }
        }
        sum=n*m;
        while(q--)
        {
            scanf("%d%d", &x, &y);
            xx=x+h-1, yy=y+w-1;
            set<int>::iterator p;
            p=pos[y].lower_bound(x);
            while( p!=pos[y].end()&&(*p)<=xx)
            {
                dfs(*p,y);
                //int t=*p;
                p=pos[y].lower_bound(x); //  此行不知道为什么将x改为*p就RE
                if(p==pos[y].end())
                    break;
            }
            printf("%d
    ", sum);
        }
        return 0;
    }

    J The Keys       solved by ym &czh

    题意

    n扇门从1~n排成一行,按顺序开门,给出开n扇门的钥匙比编号,现有m个钥匙扣,每把钥匙随机的放在一个钥匙扣上,初始所有的钥匙扣都在兜里,问需要交换几次使全部的门都打开的期望值

    (一把钥匙可能开多扇门,每次交换一定可以将正确的钥匙拿出,开第一扇门拿的钥匙扣不算交换次数,每次交换)

    分析

    每一扇门不在当前钥匙扣的概率为(k-1)/k

    根据期望线性可加不难算出ans=k1kni=1[didi+1]ans=k−1k∑i=1n[di≠di+1]。


    K Dire, Dire Docks

    题意

    给出n个点的坐标,要求有n条线段,线段只经过两个点,且不能穿过其它线段,一个点不能超过四条线段连接,输出线段的起末点,解不唯一,顺序不唯一

    分析

    ym:极角排序,留坑


    Summary

    Ym:深知dp多么强大,不会dp是多么无助,前期脑残罚时过多

    Czh:

     

  • 相关阅读:
    day 1 python全栈学习笔记(不完全版)
    python全栈学习之旅正式开始了!
    [Web] Web开发中你可以借鉴的东西
    Google Guice 系列教程 - 基础实践
    Ant
    [Android]Android高级UI开发系列教程(一) Android拖拽教程
    [Android]Android高级UI开发系列教程(二) Android绘制教程
    [Android] 布局基础知识点
    BitbucketGit
    [Android]Android高级UI开发系列教程(三) Android样式和主题教程
  • 原文地址:https://www.cnblogs.com/Deadline/p/8795063.html
Copyright © 2020-2023  润新知