<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      模擬賽25

      模擬賽25

      最近怎么狂掛不止。

      1. 博弈

        考慮策略,首先是優先最小的,但是由于有重復的,所以在最小個數為偶數時會敗,以此類推,可以想到當有一個數出現次數時奇數先手必勝,否則必敗。

        考慮將相同的兩兩相消,發現 \(u\to v\)\(u\to 根\to v\) 是等價的。

        于是每個點維護一下當前的數,問題變成了求和當前集合相同的集合有幾個,因為兩兩相消,可以異或 hash,也可用一些奇怪 hash。

        但是千萬千萬不要直接用 \(\sum a^n\),這個東西竟然是可以穩定被卡的!

      2. 跳躍

        發現其一定是在一個最大子段中反復橫跳,然后在到下一個。

        數據比較水,錯解輕松過(于是加了 hack)。

        hack 思路:

        首先是 \(k\)\(min\) 的亂搞,這個輕松卡,就是 \(1,-100000,-100000,100000,100000\) 之類的用長段的負數讓你一直在最前面跳,但其是可以到后面。

        這個在大數據隨機下效果一般,不到 \(100\) 組就會出錯,欽定第一個是 \(1\) 以后十幾組就卡掉了。

        然后是一些假了的貪心,就是每次直接向最后一個可以跳到的地方跳,這個原理就是構造前后和的差距不大,但是從前面跳到后面會有較大代價導致不優,像 \(99999,100000,-100000,-100000,-100000,-99998,100000,100000\)\(k\) 比較小的時候。

        這個在小數據隨機下效果一般,\(n,k\le 20\) 時十幾組就卡了(值域開大點),但是有人數據點分治但 \(n,k\le 20\)dfs T 了沒繃住。

        然后有一些逆天的 \(0\),比如 \(k=0\),有的要寫特判。

        還有一些暴力會在恰好整除時錯,懶得卡了,暴力一般也過不去。

        給一下數據生成器,多生成幾組就有了
        #include<bits/stdc++.h>
        using namespace std;
        using llt=long long;
        using llf=long double;
        using ull=unsigned long long;
        #ifdef LOCAL
            FILE *InFile=freopen("in_out/in.in","r",stdin),*OutFile=freopen("in_out/in.in","w",stdout);
        #else
            FILE *InFile=stdin,*OutFile=stdout;
        #endif
        
        mt19937 rnd(ull(new char)*ull(new char));
        
        int main(){
            ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr);
            cout<<10<<endl;
            for(int t=1;t<=10;++t){
                int k=rnd()%10+1;
                if(k<=2){
                    int n=901+rnd()%100,k=999999901+rnd()%100; cout<<n<<' '<<k<<endl;
                    for(int i=1;i<=n;++i){
                        if(rnd()%5==0) cout<<0<<' '; 
                        else cout<<int(rnd()%200000)-100000<<' '; 
                    }cout<<endl;
                }else if(k<=4){
                    int n=901+rnd()%100,k=999999901+rnd()%100; cout<<n<<' '<<k<<endl;
                    cout<<1<<' '; for(int i=2;i<=n;++i) cout<<int(rnd()%200000)-100000<<' '; cout<<endl;
                }else if(k<=6){
                    int n=10+rnd()%10,k=10+rnd()%10; cout<<n<<' '<<k<<endl;
                    for(int i=1;i<=n;++i) cout<<int(rnd()%200000)-100000<<' '; cout<<endl;
                }else if(k<=8){
                    int n=rnd()%1000+1,k=rnd()%1000000000+1; cout<<n<<' '<<k<<endl;
                    for(int i=1;i<=n;++i) cout<<int(rnd()%200000)-100000<<' '; cout<<endl;
                }else{
                    int n=rnd()%1000+1; cout<<n<<' '<<0<<endl;
                    for(int i=1;i<=n;++i) cout<<int(rnd()%200000)-100000<<' '; cout<<endl;
                }
            }
        }
        
      3. 大陸

        水題,建議改名:樹分塊前置。

        就是考慮維護子樹中沒有被選的,合并到父親上,如果 \(\ge B\) 就單開一個,以父節點為省會。

        最后的根直接歸到最后一個即可,可以證明其不超過 \(3B-1\)

      4. 排列

        逆天題。

        其實思路很簡單,就是直接維護 \(min\)\(max\),在子樹是否存在三元組,二元組中最大的最小和最小的最大。

        因為只有在不存在三元組時要維護二元組,直接子樹二分即可。

        代碼長,但還算好寫。

      posted @ 2024-08-21 21:23  xrlong  閱讀(45)  評論(0)    收藏  舉報

      Loading

      主站蜘蛛池模板: 淄博市| 久久亚洲私人国产精品| 9lporm自拍视频区| 午夜福利国产一区二区三区| 久久综合久中文字幕青草| 国产精品美女www爽爽爽视频| 在线免费不卡视频| 国产精品亚洲аv无码播放| 人妻激情另类乱人伦人妻| 亚洲成a人片在线观看久| 原平市| 亚洲熟妇精品一区二区| 美女又黄又免费的视频| 爱啪啪精品一区二区三区| 亚洲五月天一区二区三区| 国产18禁黄网站禁片免费视频| 亚洲一区二区三区四区| 天天躁夜夜躁av天天爽| 亚洲区一区二区三区精品| 性色欲情网站iwww九文堂| 加勒比无码人妻东京热| 國產尤物AV尤物在線觀看| 东方av四虎在线观看| 香格里拉县| 98精品全国免费观看视频| 丁香婷婷无码不卡在线| 中文字幕日韩一区二区三区不卡| 色一伊人区二区亚洲最大| 人妻综合专区第一页| 精品国产精品国产偷麻豆| 国产精品大全中文字幕| 精品无码国产自产拍在线观看蜜 | 亚洲欧美人成网站在线观看看| 广汉市| 在线 欧美 中文 亚洲 精品| 国产精品99中文字幕| 太和县| 国产成人高清精品亚洲| 久久人人97超碰精品| 日韩激情成人| 国产AV无码专区亚洲AWWW|