zoukankan      html  css  js  c++  java
  • noip2016十连测round1

    A:String Master

    题目:所谓最长公共子串,比如串 A:“abcde”,串 B:“jcdkl”,则它们的最长公共子串为串 “cd”,即长

    度最长的字符串,且在两个串中都作为连续子串出现过。
    给定两个长度都为 n 的字符串,对于字符串大师的你来说,求它们的最长公共子串再简单不过了。
    所以现在你有 k 次修改机会,每次你可以选择其中某个串的某个位置,将其修改成任意字符。
    你需要合理使用这 k 次修改机会,使得修改之后两个串的最长公共子串最长。相信对于字符串大师
    的你来说,这个问题也难不倒你。 n,k<=300;

    做法:这题显然是dp,作为第一题还是很友好的,dp[i][j][k]表示A串以i结尾,B串以j结尾,修改k次的最长公共子串。

    if A[i]==B[j] then dp[i][j][k]=dp[i-1][j-1][k]+1;

    dp[i][j][k]=dp[i-1][j-1][k-1]+1。

    B:Tourist Attractions

    题目:在美丽的比特镇一共有 n 个景区,编号依次为 1 到 n,它们之间通过若干条双向道路连接。

    Byteasar 慕名来到了比特镇旅游,不过由于昂贵的门票费,他只能负担起 4 个景区的门票费。他可
    以在任意景区开始游览,然后结束在任意景区。
    Byteasar 的旅游习惯比较特殊,一旦他路过了一个景区,他就一定会进去参观,并且他永远不会参
    观同一个景区两次。所以他想知道,有多少种可行的旅游路线,使得他可以恰好参观 4 个景区呢?即,
    有多少条简单路径恰好经过了 4 个点。 N<=1500

    做法:N三方的做法是送分的,因为路径上有4个点,所以我们枚举中间两个点i,j(i,j之间有边相连),对答案的贡献就是(deg[i]-1)*(deg[j]-1),这样会有问题,因为可能存在着三元环,所以还要减去与i,j都有边相连的点的个数,记录si为i号点的与其他点的连通情况,三元环的个数就是si&sj后1的个数,这明明是N^3,可是出题人看我不会bitset,其实我是不会告诉你,只要用bitset压位即可做到N^3/32,可以通过此题。

    C:Walk

    题目:在比特镇一共有 n 个街区,编号依次为 1 到 n,它们之间通过若干条单向道路连接。

    比特镇的交通系统极具特色,除了 m 条单向道路之外,每个街区还有一个编码 val i ,不同街区可能
    拥有相同的编码。如果 val i and val j = val j ,即 val i 在二进制下与 val j 做与运算等于 val j ,那么也会
    存在一条额外的从 i 出发到 j 的单向道路。
    Byteasar 现在位于 1 号街区,他想知道通过这些道路到达每一个街区最少需要多少时间。因为比特
    镇的交通十分发达,你可以认为通过每条道路都只需要 1 单位时间。 val<2^20,n<=200000,m<=300000;

    做法:一道神题,orzClaris...... 这题有两个值得我学习的做法,第一个是新建2^20个点,每个点向vali连一条权值为1的边,vali向这个点连权值为0的边,原图中的边照样连着,然后对于新建的结点,每个点向自己的子集连边,这样可以通过val<2^15的数据,然后第二个就是改进边数了,仔细思考一下,其实只要是i一直走权值为0的边到i的子集节点即可,所以我们把val向其二进制位中去掉某一个1后的节点连权值为0的边即可,正确性显而易见。最后再BFS即可,注意在BFS的时候当一个节点入队时,就要把所有与该节点距离为0的点也入队,以保证BFS的正确性。

  • 相关阅读:
    iOS-Core Text 入门
    Mac浏览器全屏设置
    Quartz 2D - 图形上下文(Graphics Contexts)
    Quartz 2D 概述
    Quartz 2D官方文档翻译(持续更新中)
    那些年,我们常掉进去的坑
    CGAffineTransformMake(a,b,c,d,tx,ty) 矩阵运算的原理 (转载)
    科大讯飞
    Object-C语言类的扩展
    科大讯飞语音识别
  • 原文地址:https://www.cnblogs.com/OYzx/p/5931533.html
Copyright © 2011-2022 走看看