2016-2017 National Taiwan University World Final Team Selection Contest

A - Hacker Cups and Balls

Gym - 101234A

題意:給出一個長度為n(n為奇數(shù)迷帜,1 \leq n \leq 99999)的數(shù)組殖卑,給出m個操作,0 \leq m \leq 10^5执泰,每一個操作包含一個l_{i}r_{i}宋下,如果給出的l_{i} < r_{i}嗡善,那么將這段排序成遞增,如果l_{i} > r_{i}学歧,將這段排序成遞減罩引。最后輸出數(shù)組最中間的那個數(shù)字。
思路

二分答案k枝笨,記\leq k的數(shù)為0袁铐,> k的數(shù)為1,那么區(qū)間排序就是把區(qū)間中的0和1提取出來然后再按順序刷回去横浑,用一個支持區(qū)間賦值區(qū)間求和的線段樹維護即可剔桨,最后求出\lfloor \frac{n+1}{2} \rfloor處的值,若為0則k可能更小徙融,否則必須更大洒缀,復雜度O(n\log^2n)
saltyfish/2016-2017 National Taiwan University World Final Team Selection Contest

B - Bored Dreamoon

Gym - 101234B

C - Crazy Dreamoon

Gym - 101234C

題意:一個 2000 * 2000 的格子,輸入n條線段欺冀,求被觸碰到的格子的數(shù)量树绩。
思路:按照線段斜率模擬。若k==1k==-1隐轩,觸格正好在斜對角上饺饭;若0 < k < 1或者-1 < k < 0,觸及到的格子都是在線段的左职车、右砰奕,左、右提鸟,向上延伸的军援,如果是k > 1或者k < -1,觸及到的格子都是在線段的上称勋、下胸哥,上、下赡鲜,向上延伸的空厌,對于中間有某個點正好卡在整數(shù)坐標上庐船,就直接continue。注意函數(shù)每次的變化值就是+k嘲更。
AC代碼

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#define eps 1e-8
using namespace std;
const int maxn = 2000 + 100;
bool mark[maxn][maxn];
int n, cnt;

void solve(double x1, double y1, double x2, double y2) {
    double k = (y2 - y1) / (x2 - x1);
    if( fabs(k-1) < eps ) {
        int st = (int)x1, ed = (int)x2, sty = (int)y1;
        for(int i = st; i < ed; ++i) {
            if(!mark[i][sty]) {
                mark[i][sty] = true;
                ++cnt;
            }
            ++sty;
        }
    }
    else if( fabs(k+1) < eps ) {
        int st = (int)x1, ed = (int)x2, sty = (int)y1 - 1;
        for(int i = st; i < ed; ++i) {
            if(!mark[i][sty]) {
                mark[i][sty] = true;
                ++cnt;
            }
            --sty;
        }
    }
    else if( k > 0 && k < 1 ) {  // left & right
        int st = (int)x1 + 1, ed = (int)x2;
        double d = y1;
        for(int i = st; i < ed; ++i) {
            d += k;
            int d1 = (int)d, d2 = (int)d + 1;
            if(fabs(d1 - d) < eps || fabs(d2 - d) < eps)
                continue;
            if(!mark[i-1][d1]) {
                mark[i-1][d1] = true;
                ++cnt;
            }
            if(!mark[i][d1]) {
                mark[i][d1] = true;
                ++cnt;
            }
        }
    }
    else if( k < 0 && k > -1 ) {  // left & right
        int st = (int)x1 + 1, ed = (int)x2;
        double d = y1;
        for(int i = st; i < ed; ++i) {
            d += k;
            int d1 = (int)d, d2 = (int)d + 1;
            if(fabs(d1 - d) < eps || fabs(d2 - d) < eps)
                continue;
            if(!mark[i-1][d1]) {
                mark[i-1][d1] = true;
                ++cnt;
            }
            if(!mark[i][d1]) {
                mark[i][d1] = true;
                ++cnt;
            }
        }
    }
    else if(k > 1){  // up & down
        double kk = (x2 - x1) / (y2 - y1);
        int st = (int)y1 + 1, ed = (int)y2;
        double d = x1;
        for(int i = st; i < ed; ++i) {
            d += kk;
            int d1 = (int)d, d2 = (int)d + 1;
            if(fabs(d1 - d) < eps || fabs(d2 - d) < eps)
                continue;
            if(!mark[d1][i-1]) {
                mark[d1][i-1] = true;
                ++cnt;
            }
            if(!mark[d1][i]) {
                mark[d1][i] = true;
                ++cnt;
            }
        }
    }
    else if(k < -1){  // up & down
        double kk = (x2 - x1) / (y2 - y1);
        int st = (int)y1 - 1, ed = (int)y2, b = (int)x1;
        double d = x1;
        for(int i = st; i > ed; --i) {
            d -= kk;
            int d1 = (int)d, d2 = (int)d + 1;
            if(fabs(d1 - d) < eps || fabs(d2 - d) < eps)
                continue;
            if(!mark[d1][i-1]) {
                mark[d1][i-1] = true;
                ++cnt;
            }
            if(!mark[d1][i]) {
                mark[d1][i] = true;
                ++cnt;
            }
        }
    }
}


int main() {
    double x1, y1, x2, y2;
    cnt = 0;
    scanf("%d", &n);
    for(int i = 0; i < n; ++i) {
        scanf("%lf%lf%lf%lf", &x1, &y1, &x2, &y2);
        if(fabs(x1-x2) < eps || fabs(y1-y2) < eps)
            continue;
        if(x1 > x2) {
            swap(x1, x2);
            swap(y1, y2);
        }
        solve(x1, y1, x2, y2);
    }
    printf("%d\n", cnt);
    return 0;
}

D - Forest Game

Gym - 101234D

E - Lines Game

Gym - 101234E
題意:給出n (1 ≤ N ≤ 10^5) 個線段和權值筐钟,給出第一行p_{i},表示第i個線段為(0, i)(1, p_{i})的連線赋朦,第二行為線段對應的權值v_{i}÷ǔ澹現(xiàn)在要把這些線段刪掉,刪一個線段的同時可以把與它相交的所有線段都刪掉宠哄,但花費僅是這一條線段的權值壹将。求最小花費。
思路:判斷線段相交/不相交的條件非常簡單毛嫉,若i_{1} > i_{2}p_{i_{1}} > p_{i_{2}} 或者 i_{1} < i_{2}p_{i_{1}} < p_{i_{2}} 诽俯,那么兩條線段必然不相交。然后按照貪心的取法承粤,盡量去取權值小的暴区。但是存儲和查找相交線段的復雜度比較不可觀,這樣的思路無法實現(xiàn)辛臊。

F - Lonely Dreamoon 2

Gym - 101234F

G - Dreamoon and NightMarket

Gym - 101234G

題意:主人公去吃飯颜启,現(xiàn)在有N種價值的食物(2 ≤ N ≤ 2 × 10 ^ 5),他每天都要吃與之前不同且最便宜的組合浪讳,問第K(1 ≤ K ≤ min (10 ^ 6, 2 ^ N ?1) )天他花了多少錢缰盏。
思路:我理解的是01背包k優(yōu)解?
聽說有的隊伍優(yōu)先隊列過的

H - Split Game

Gym - 101234H

I - Tree Game

Gym - 101234I

J - Zero Game

Gym - 101234J
題意:給出一個由0、1組成的串淹遵,現(xiàn)在允許你進行Q種操作口猜,每種操作可以進行K_{i}步,每次操作可以隨意挑一個數(shù)字移動位置透揣。問操作后能夠得到的最長的連續(xù)的0串有多長济炎。

思路:單調(diào)隊列

枚舉答案中最左邊0的位置,對應的方案應該是刪除該位置右側(cè)的連續(xù)若干段1辐真,設delta=刪除1后加入的0的個數(shù)-刪除的1的個數(shù)须尚,問題便轉(zhuǎn)化為維護delta的最大值,用一個單調(diào)隊列即可

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末侍咱,一起剝皮案震驚了整個濱河市耐床,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌楔脯,老刑警劉巖撩轰,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡堪嫂,警方通過查閱死者的電腦和手機偎箫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來皆串,“玉大人淹办,你說我怎么就攤上這事《窀矗” “怎么了怜森?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長寂玲。 經(jīng)常有香客問我,道長梗摇,這世上最難降的妖魔是什么拓哟? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮伶授,結(jié)果婚禮上断序,老公的妹妹穿的比我還像新娘。我一直安慰自己糜烹,他們只是感情好违诗,可當我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著疮蹦,像睡著了一般诸迟。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上愕乎,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天阵苇,我揣著相機與錄音,去河邊找鬼感论。 笑死绅项,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的比肄。 我是一名探鬼主播快耿,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼芳绩!你這毒婦竟也來了掀亥?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤妥色,失蹤者是張志新(化名)和其女友劉穎铺浇,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡鳍侣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年丁稀,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片倚聚。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡线衫,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出惑折,到底是詐尸還是另有隱情授账,我是刑警寧澤,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布惨驶,位于F島的核電站白热,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏粗卜。R本人自食惡果不足惜屋确,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望续扔。 院中可真熱鬧攻臀,春花似錦、人聲如沸纱昧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽识脆。三九已至设联,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間灼捂,已是汗流浹背仑荐。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留纵东,地道東北人粘招。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像偎球,于是被迫代替她去往敵國和親洒扎。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 各校歷年復試機試試題 清華衰絮、北大袍冷、華科試題詳細筆記部分,少筆記部分與少數(shù)leetcode【含個人整理筆記】 一猫牡、詳...
    十里江城閱讀 1,185評論 0 1
  • 這是16年5月份編輯的一份比較雜亂適合自己觀看的學習記錄文檔胡诗,今天18年5月份再次想寫文章,發(fā)現(xiàn)簡書還為我保存起的...
    Jenaral閱讀 2,756評論 2 9
  • A - Artwork Gym - 101550A題意:給一個n*m的格子,進行q(1 ≤ q ≤ 1e4)次涂色...
    JinxiSui閱讀 541評論 0 0
  • 還記得馬丁路德金的夢想么? 自由 人們看起來越來越自由了 人們有了更多的選擇 也在追求更多更好的選擇 可自由又太過...
    簡文隨感閱讀 429評論 0 0
  • 望著河邊那極美且窈窕的身段瑰抵,后者充滿愛的目光呆滯地停留在辛南美艷的面容你雌,那長長的綢緞環(huán)繞其周身宛如不天上那食...
    樂樂_6c2a閱讀 148評論 0 1