主頁 >  其他 > 2020(11.01)-CCPC-綿陽-(D,G,J,K,L)題解

2020(11.01)-CCPC-綿陽-(D,G,J,K,L)題解

2020-11-09 15:39:47 其他

D.Defuse the Bombs(二分答案)

思路:直接二分答案K,判斷能不能在K次操作以內,把所有的數都變成 >= K就行了,最后答案等于K+1

AC代碼:

#include <bits/stdc++.h>
#define int long long
#define showcase cout<<"Case #"<<cas++<<": ";
using namespace std;
int a[100050];
int T,cas = 1;
int n,m;
bool check(int k){
    int res = 0;
    for(int i = 0 ; i < n ; i ++){
        if(k<=a[i]) continue;
        res += max((int)0,k-a[i]);
        if(res > k ) return false;
    }
    return res <= k;
}

signed main(){
    cin>>T;
    while(T--){
        cin>>n;
        for(int i = 0 ; i < n ; i ++)
            cin>>a[i];
        int l = 0,r = 1e18;
        int res = 0;
        while(l <= r){
            int mid = (l+r)>>1;
            if(check(mid)){
                res = max(res,mid);
                l = mid+1;
            }else{
                r = mid-1;
            }
        }
        cout<<"Case #"<<cas++<<": "<<res+1<<endl;
    }
}

G.Game of Cards(博弈)

思路:比賽時還是沒有想出來,后來仔細推了一下感覺也不是很難,但是分很多很多種情況,首先可以很容易的發現,答案和 cnt1%3 的值有關,并且和 cnt0%2 的值有關,與cnt3無關,

  • 首先考慮 cnt0 == 0 的情況,那就是如下圖所示的情況了,顯然當cnt2 等于0 或者 不等于0 時都是一個關于3的回圈(但是兩者不相同),那就直接按規律輸出就好了,
  • 對于cnt0 != 0 的情況,還得特判,如果后面三個都是0,那么只能 0+0 了,也就是每次減少一張 0卡牌 的數量,那么答案和 cnt0 的奇偶性有關,
  • 對于cnt0 != 0 且 后面不全為0的情況,還要判斷,cnt2 是 0 還是1,因為對于 cnt2 >= 2 ,那么所有的轉移都是相同的,而當cnt2 == 1 和cnt2 == 0 時,轉移方向雖然是相同的,但是轉移的結果不相同,所以還得區分,(反正就是一堆特判)
  • 對于剩下的規則的狀態,就判斷能不能找到一個狀態使得轉移之后還是必勝態了,

在這里插入圖片描述

AC代碼:

#include <bits/stdc++.h>
#define int long long
using namespace std;
int cas = 1;
int tt1[3] = {0,0,1};       // 2號卡牌數量為0 的勝負情況
int tt2[3] = {0,1,1};       // 2號卡牌數量非0 的勝負情況

void show(int x){
    cout<<"Case #"<<cas++<<": ";
    if(x) cout<<"Rabbit"<<endl;
    else  cout<<"Horse"<<endl;
}

signed main(){
    int t;
    cin>>t;
    while(t--){
        int cnt0,cnt1,cnt2,cnt3;
        cin>>cnt0>>cnt1>>cnt2>>cnt3;
        if(cnt1 + cnt2 + cnt3 == 0){
            if(cnt0 <= 1)
                show(0);
            else
                show(cnt0%2 == 0);
        }else{
            int flag1 = cnt0%2;
            cnt1 %= 3;
            if(cnt0 == 0){              // 沒有0號卡牌的情況,直接按規律輸出
                if(cnt2 == 0){          // 沒有2號卡牌的情況,特判
                    show(tt1[cnt1]);
                }else{
                    show(tt2[cnt1]);
                }
            }else if(cnt2 == 0){        // 沒有2號卡牌的情況,特判,又因為存在0號卡牌,要異或一下
                show(tt1[cnt1]^flag1);
            }else if(flag1){            // 如果可以轉移到對手的必勝態,則自己可以獲勝
                if(cnt1 == 2 || cnt1 == 0){
                    show(1);
                }else{
                    show(0);
                }
            }else{
                if(cnt1 == 2 || cnt1 == 1){ // 如果可以轉移到自己的必勝態,則可以獲勝
                    show(1);
                }else{
                    show(0);
                }
            }
        }
    }
    return 0;
}

J.Joy of Handcraft(線段樹)

思路:稍微預處理一下,然后直接線段樹暴力模擬就好了,因為題目給的t可能是相同的,那么對于相同的t,只保存最大的那個,因為最多只有n種t,那么總的復雜度就是 log(n)*n*log(n),因為 (n/1+n/2+n/3+n/4+…+n/n) = n*log(n)

AC代碼:

#include <bits/stdc++.h>
#define int long long
#define showcase cout<<"Case #"<<cas++<<": ";
using namespace std;
int T,cas = 1;
int n,m;
struct node{
    int t,x;
    node(){}
}a[100050];
int tree[100050<<8];
int lazy[100050<<8];
void push_down(int pos){
    int lson = pos<<1;
    int rson = pos<<1|1;
    lazy[lson] = max(lazy[lson],lazy[pos]);
    lazy[rson] = max(lazy[rson],lazy[pos]);
    tree[lson] = max(tree[lson],lazy[pos]);
    tree[rson] = max(tree[rson],lazy[pos]);
    lazy[pos] = 0;
}

void push_up(int pos){
    tree[pos>>1] = max(tree[pos>>1],tree[pos]);
}

void build(int pos,int l,int r){
    tree[pos] = lazy[pos] = 0;
    if(l == r) return;
    int lson = pos<<1;
    int rson = pos<<1|1;
    int mid = (l+r)>>1;
    build(lson,l,mid);
    build(rson,mid+1,r);
}

void update(int pos,int x,int l,int r,int ll,int rr){
    if(ll <= l && rr >= r){
        lazy[pos] = max(lazy[pos],x);
        tree[pos] = max(tree[pos],x);
        return;
    }
    int lson = pos<<1;
    int rson = pos<<1|1;
    int mid = (l+r)>>1;
    if(lazy[pos]) push_down(pos);
    if(ll <= mid) update(lson,x,l,mid,ll,rr);
    if(rr > mid)  update(rson,x,mid+1,r,ll,rr);
}

int ask(int pos,int l,int r,int x){
    if(l == r){
        if(l == x)  return tree[pos];
        else return 0;
    }
    int lson = pos<<1;
    int rson = pos<<1|1;
    int mid = (l+r)>>1;
    if(lazy[pos]) push_down(pos);
    if(x <= mid) return ask(lson,l,mid,x);
    if(x > mid)  return ask(rson,mid+1,r,x);
}

bool cmp(node a1,node a2){
    if(a1.t == a2.t) return a1.x > a2.x;
    return a1.t < a2.t;
}


signed main(){
    cin>>T;
    a[0].t = 0;
    while(T--){
        cin>>n>>m;
        for(int i = 1 ; i <= n ; i ++){
            cin>>a[i].t>>a[i].x;
        }
        sort(a+1,a+n+1,cmp);
        build(1,1,m);
        for(int i = 1 ; i <= n; i ++){
            if(a[i].t != a[i-1].t){
                for(int j = min(m,a[i].t),pre = 1; j <= m ; j = min(m,j+2*a[i].t)){
                    //cout<<pre<<"--"<<j<<endl;
                    update(1,a[i].x,1,m,pre,j);
                    pre = j+a[i].t+1;
                    if(j == m) break;
                }
            }
        }
        showcase;
        for(int i = 1 ; i < m ; i ++){
            cout<<ask(1,1,m,i)<<" ";
        }
        cout<<ask(1,1,m,m)<<endl;
    }
}

K.Knowledge is Power(打表,找規律)

思路:找規律,分類討論也可以,但是比賽的時候分了半天還分錯了,最后DFS打表發現了36個一次回圈,直接水過了,

AC代碼:

#include <bits/stdc++.h>
#define int long long
#define showcase cout<<"Case #"<<cas++<<": ";
using namespace std;
int a[100050];
int T,cas = 1;
int n,m;
int res1[] = {1,-1,1,2,1,3,1,2,1,4};
int res2[] = {4,1,2,1,2,1,2,1,4,1,2,1,3,1,2,1,2,1,2,1,3,1,2,1,3,1,2,1,2,1,2,1,3,1,2,1};
int maxx = 0;
vector<int> res;
int gcd(int x,int y){
    if(x < y) swap(x,y);
    return y == 0 ? x : gcd(y,x%y);
}

void dfs(int x,int sum,vector<int> nums){
    if(sum > n) return;
    if(sum == n){
        for(int i = 0 ; i < nums.size() ; i ++){
            for(int j = 0 ; j < nums.size() ; j ++){
                if(i == j) continue;
                if(gcd(nums[i],nums[j]) != 1){
                    return;
                }
            }
        }
        if(nums[nums.size()-1]-nums[0] < maxx){
            maxx = nums[nums.size()-1]-nums[0];
            res.clear();
            for(int i = 0 ; i < nums.size() ; i ++){
                res.push_back(nums[i]);
            }
        }
    }
    if(nums.size() >= 3) return;
    nums.push_back(x);
    dfs(x+1,sum+x,nums);
    dfs(x+2,sum+x,nums);
    dfs(x+3,sum+x,nums);
    dfs(x+4,sum+x,nums);
    nums.pop_back();
}

signed main(){
    cin>>T;
    while(T--){
        cin>>n;
        n -= 5;
        showcase;
        if(n > 9) cout<<res2[(n-9)%36]<<endl;
        else cout<<res1[n]<<endl;
//        n += 5;
        for(n = 5 ; n <= 10000 ; n ++){
//            if(n == 6){cout<<-1<<endl;continue;}
//            maxx = 10;
//            for(int i = 2; i < n ; i ++){
//                vector<int> nums;
//                dfs(i,0,nums);
//            }
//            cout<<res[res.size()-1]-res[0]<<endl;
//            if((n-13)%36 == 0) cout<<endl;
//            for(int i = 0 ; i < res.size(); i++){
//                cout<<res[i]<<" ";
//            }
//            cout<<endl;
//        }
        //showcase;
    }
}

L.Lottery(思維,二進制)

思路:首先對于每一位,最多只要留下2個就好了,剩下的往后一直進位就好了,然后就預處理成了很多連續的非零的塊, 對于每個塊, 都是相互獨立不影響的,因為每個位上最大是2,對于一個塊,最多只能往最高位進位一位, 如果一個位上是1,那么就有0,1兩種方案,而如果一個位置上是2,就有0,1,進位,三種方案,如果進位的話,增加的方案數,就是在他后面連續的非0個數,

更一般的解釋:如果一個塊 1122112 從左往右數,對于第一個2增加 22種方案,對于第二個2增加23種方案,對于第三個2增加26種方案, 可以想象,令當前位進位,那么當前位為往后都是0,最高位為1,而前面的位可以選擇0,1兩種狀態,按112212舉例:如果第一個2進位:xx000001,x兩種狀態,所以就是22種,

最后把每個塊的方案數相乘就好了,因為互不影響

AC代碼:

#include <bits/stdc++.h>
#define int long long
#define showcase cout<<"Case #"<<cas++<<": ";
using namespace std;
const int mod = 1e9+7;
int T,cas = 1;
int n,m;

struct node{
    int x,cnt;
    node(){}
    node(int xx,int cc){
        x = xx;
        cnt = cc;
    }
}a[100050],que[3200050];

int qpow(int a,int b){
    int res = 1;
    int tmp = a;
    while(b){
        if(b&1) res = res*tmp%mod;
        b >>= 1;
        tmp = tmp*tmp%mod;
    }
    return res%mod;
}

bool cmp(node a1,node a2){
    return a1.x < a2.x;
}

signed main(){
    //rand_test();    return 0;
    //freopen("in.txt","r",stdin);
    //freopen("out.txt","w",stdout);
    //freopen("out3.txt","w",stdout);
    scanf("%lld",&T);
    while(T--){
        scanf("%lld",&n);
        for(int i = 0 ; i < n ; i ++){
            scanf("%lld%lld",&a[i].x,&a[i].cnt);
        }
        sort(a,a+n,cmp);
        int tail = 0;
        for(int i = 0 ; i < n; i ++){
            que[tail] = a[i];
            while(que[tail].cnt > 2){
                int tmp = (que[tail].cnt-1)>>1;
                if(i+1 >= n || que[tail].x+1 != a[i+1].x){
                    que[tail+1] = node(que[tail].x+1,tmp);
                    que[tail].cnt -= tmp<<1;
                    ++ tail;
                }else{
                    a[i+1].cnt += tmp;
                    que[tail].cnt -= tmp<<1;
                }
            }
            ++ tail;
        }
        int pre = 0,now = 0,res = 1,tmp = 1;
        for(int i = 0 ; i < tail ; i ++){
            if(i >= 1){
                if(que[i].x != que[i-1].x+1){
                    res = (res*(qpow(2,now)+pre)%mod)%mod;
                    pre = 0;
                    now = 0;
                    tmp = 1;
                }
            }
            ++ now;
            pre += (que[i].cnt&1) ? 0 : tmp;
            pre %= mod;
            tmp = (tmp<<1)%mod;
        }
        res = (res*(qpow(2,now)+pre)%mod)%mod;
        printf("Case #%lld: %lld\n",cas++,res);
    }
}

小結:前一天沒睡好,打比賽完全不在狀態,純屬摸魚,靠著隊友的快速三題混進了銅牌區,最后兩小時博弈也沒推出來,不過依然還是打星,等于花錢訓練了一波

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/208001.html

標籤:其他

上一篇:初入Python(一) Pygame貪吃蛇游戲的撰寫與改進

下一篇:關于機械鍵盤的一些基礎知識

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more