1. 程式人生 > >(SWERC 2017)

(SWERC 2017)

文章目錄


(SWERC 2017)

A Cakey McCakeFace

O(N^2) 求出所有的差值即可,map 存下

#include<bits/stdc++.h>
using namespace std; typedef long long LL; const int maxn = 2000+10; LL a[maxn]; int main(void){ map<LL,int> ma; int N,M; LL u; scanf("%d%d",&N,&M); for(int i = 1;i <= N; ++i){ scanf("%lld",&a[i]); // ma[u]++; } for(int i =1;i <= M; ++
i){ scanf("%lld",&u); for(int i = 1;i <= N; ++i){ if(u >= a[i]){ ma[u-a[i]]++; } } // ma[u]++; } LL num = 0; LL Min = 0; for(auto c: ma){ if(c.second > num){ num = c.second; Min =
c.first; } } cout<<Min<<endl; return 0; }

C Macaron

題意:

1 2 , 1 1 1*2,1*1 的矩陣覆蓋 n m n*m 的矩形的方法數, n &lt; = 8 , M &lt; = 1 e 18 n &lt;= 8,M &lt;= 1e18

分析:

本題是 1033 骨牌覆蓋 V2的擴充套件, 本題的狀態比較麻煩,可以用dfs確定狀態 i i 之後可以轉移的狀態 j j ,其中1代表覆蓋,0代表未覆蓋


// 矩陣快速冪
// 注意修改maxn 的值,要不然容易T

const int maxn = 260;
int n;
struct Matrix{
    int n,m;
    Matrix(int nn = 1,int mm = 1):n(nn),m(mm){ memset(a,0,sizeof(a));};
    int  a[maxn][maxn];
};
void print(const Matrix &a)
{
 for(int i = 1;i <= a.n; ++i,cout<<endl)
  for(int j= 1;j <= a.m; ++j)
     cout<<a.a[i][j]<<" ";
}
Matrix operator*(Matrix a,Matrix b)
{
    Matrix c(a.n,b.m);
    for(int i = 1;i <= a.n; ++i)
    {
        for(int j = 1;j <= b.m; ++j)
        {
            for(int k = 1;k <= a.m; ++k)
            {
                c.a[i][j] = (1ll*c.a[i][j]+1ll*a.a[i][k] * b.a[k][j])%mod;
            }
        }
    }
//  print(c);
    return c;
}
// 狀態壓縮

LL MM[maxn][maxn];
LL N,M;
// a 代表是a的遞推,now代表當前行的狀態,nxt代表下一行的狀態
void dfs(int  a,int  now,int  nxt){
  // cout<<a<<endl;
  int tmpnow = now,tmpnxt = nxt;
  int one[10],two[10];
  memset(one,0,sizeof(one));
  memset(two,0,sizeof(two));
  int cnt = 0;
  while(tmpnow > 0){
    one[cnt++] = tmpnow&1;
    tmpnow >>= 1;

  }
  bool flag = true;
  for(int i = 0;i < N; ++i){
     if(!one[i]){
        flag = false;
        break;
     }
  }
  if((now & NN) == NN){
    MM[a][nxt]++;
    return ;
  }
  cnt = 0;
  while(tmpnxt  > 0){
    two[cnt++] = tmpnxt&1;
    tmpnxt >>= 1;
  }
  for(int i = 0;i < N; ++i){
    if(!one[i]){
        dfs(a,now|(1<<i),nxt);
        dfs(a,now|(1<<i),nxt|(1<<i));
        if(i + 1 < N&& !one[i+1]){
            dfs(a,now|(1<<i)|(1<<(i+1)),nxt);
        }
       break;
    }
  }

}
int NN;
Matrix ans(NN,NN);
Matrix B(NN,NN);
void solve(){
    B.n = B.m = ans.n = ans.m = NN;
    for(int i = 1;i <= NN; ++i){
        for(int j = 1;j <= NN; ++j)
        {
            B.a[i][j] = MM[i-1][j-1];
        }
    }

    for(int i = 1;i <= NN; ++i) ans.a[i][i] = 1;
    while(M > 0){
        if(M & 1)
            ans = ans*B;
        B = B*B;
        M >>= 1;
    }
   cout<<ans.a[1][1]<<endl;
}
int main(void)
{
    scanf("%lld%lld",&N,&M);
    // cout<<N<<" "<<M<<endl;
    NN = 1<<N;
    // cout<<N<<" "<<NN<<endl;
    for(int i = 0;i < NN; ++i){
        dfs(i,i,0);
    }
    solve();
   return 0;
}


D Candy Chain

D Candy Chain

E Ingredients

題意

n種菜,每種菜由其它菜加一種食材組合而成,消耗 w,收穫 v 點聲望,不由其他菜組合而成的為基礎菜 ,生產需要消耗 0 ,收穫 0 點聲望
每一種菜可能由多條方式合成,使用消耗最小的那一個
問: 消耗最小,得到聲望最多是多少

分析

跑最短路,然後揹包,最短路建圖的時候是單向邊,可以自己假設一個超級源點


#include<bits/stdc++.h>

using namespace std;
#define Pb   push_back 
typedef long long LL;
const LL maxn = 1e6+100;
const LL maxm = 30+3;
// char ar[maxm];
// typedef pair<LL,LL> P;
char  dish[maxn];
LL C[maxn],V[maxn];
char ar[maxm],br[maxm];
bool vis[maxn];
LL F[maxn];
typedef pair<int,int> P;
struct Edge{
    int u,v,d;
    int val;
    Edge(int uu,int vv,int dd,int va):u(uu),v(vv),d(dd),val(va){
    }
};
struct Dijstra{
    #define maxn 123456
    #define INF  123456789
    int N,M,S,T;
    
    typedef pair<int,int> P;
    vector<Edge> edges;
    vector<int> G[maxn];
    bool done[maxn];
    int d[maxn];
    // int p[maxn];
    void init(){
        for(int i = 1;i <= N; ++i) G[i].clear();
        edges.clear();
        // scanf("%d %d %d %d",&N,&M,&S,&T);
    //  cout<<N<<M<<S<<T<<endl;
        // int u,v,w;
        // for(int i = 1;i <= M; ++i){
        //     scanf("%d %d %d",&u,&v,&w);
        //     AddEdge(u,v,w);
        //     AddEdge(v,u,w);
        // }
        
    }
    void AddEdge(int u,int v,int d,int val){
        edges.push_back(Edge(u,v,d,val));
        int m = edges.size();
        G[u].push_back(m-1);    
    }
    void solve(){
        priority_queue<P,vector<P>,greater<P>> Q;
        for(int i = 1;i <= N; ++i) d[i] = INF;
            // cout<<N<<endl;
        d[S] = 0;
        memset(done,0,sizeof(done));
        Q.push(P(0,S));
        while(!Q.empty()){
            P x = Q.top(); Q.pop();
            int u = x.second;
            // cout<<u<<endl;
            if(done[u]) continue;
            done[u] = true;
            for(int i = 0;i < (int)G[u].size(); ++i){
                Edge &e = edges[G[u][i]];
                if(!done[e.v]&&d[e.v] >= d[u]+e.d){
                    if(d[e.v] > d[u]+e.d)
                        d[e.v] = d[u] + e.d,V[e.v] = V[u]+e.val,Q.push(P(d[e.v],e.v));
                    else    if(V[e.v] < V[u]+e.val)
                        V[e.v] = V[u]+e.val,Q.push(P(d[e.v],e.v));
                }
            }
        }
    
        // printf("%d\n",d[T]);
    }
};
Dijstra Dij;
bool deg[maxn];
int  main(void){

    LL M,N;
    scanf("%lld%lld",&M,&N);
    map<string,LL> ma;
    Dij.init();
    LL cnt = 0;
    LL a,b;
    string s1,s2;
    for(LL i = 1;i <= N; ++i){
        scanf("%s",dish);
        scanf("%s%s",ar,br);
        scanf("%lld%lld",&a,&b);
        s1 = dish;
        s2 = ar;
        LL u = ma[s1];
        LL v = ma[s2];
        if(u == 0) 
            ma[s1] =++cnt,u = cnt;
        if(v == 0)
            ma[s2] =++cnt,v = cnt;
        // cout<<"v "<<v<<" "<<u<<endl;
        Dij.AddEdge(v,u,a,b);
        // Dij.AddEdge(u,v,a,b);
        deg[u]++;        
    }

    for(LL i = 1;i <= cnt; ++i){
        // cout<<deg[i]<<" "<<endl;
       if(deg[i] == 0)
           Dij.AddEdge(cnt+1,i,0,0);
    }
    // cout<<cnt<<endl;
    Dij.S = cnt+1;
    Dij.N = cnt+1;
    Dij.solve();
    // cout<<cnt<<endl;
    // 揹包
    for(int i = 1;i <= cnt; ++i)
        C[i] = Dij.d[i];
    for(LL i = 1;i <= cnt; ++i){
        // if(V[i] == 0) continue;
        for(LL  j = M;j >= C[i]; --j){
            F[j] = max(F[j],F[j-C[i]]+V[i
            
           

相關推薦

(SWERC 2017)

文章目錄 (SWERC 2017) A Cakey McCakeFace C Macaron 題意: 分析: D Candy Chain E Ingredients

2017.5.3上午學習內容

技術 images logs log -1 alt cnblogs 學習內容 image 聽刑法第十一章2017.5.3上午學習內容

2017 5月3日上午

linux inux 傳播 img 目的 今天 視頻 前三 操作 今天看通信工程教學視頻,了解了Linux 的一些知識 Linux是一套免費使用和自由傳播的類Unix操作系統,是一個基於POSIX和UNIX的多用戶、多任務、支持多線程和多CPU的操作系統。 Linux的

php各版本的姿勢(2017-02-15更新)

目前 php5 com script arr use 今天 name val 今天被p師傅的黑魔法給震驚到啦,我一定是學了假php,仔細想想,其實對php版本更新並沒有在意多少,都是活在5.3那個版本,可現在都是7.0啦!另外的是在很多時候測試代碼的時候,也很依靠版本問題。

百度2017春招筆試真題編程題集合之尋找三角形

import math 可能 表示 tint blog 整數 angle printf 題目描述 三維空間中有N個點,每個點可能是三種顏色的其中之一,三種顏色分別是紅綠藍,分別用‘R‘, ‘G‘, ‘B‘表示。 現在要找出三個點,並組成一個三角形,使得這個三角形的面積最大。

2017.5.3Am

etc 分享 開機 存在 xorg log x server 節點 nbsp 微積分基本公式的例題和部分課後題 linux目錄架構/ 根目錄/bin 常用的命令 binary file 的目錄/boot 存放系統啟動時必須讀取的檔案,包括核心 (k

Visual Studio 2017各版本安裝包離線下載、安裝全解析

pla 離線文件 win10 unit splay and 文件下載 python擴展 erl 轉自 寂靜·櫻花雨 Visual Studio 2017各版本安裝包離線下載、安裝全解析 感謝IT之家網友 寂靜·櫻花雨 的投稿 關於Visual

February 26 2017 Week 9 Sunday

ngs mos only fin who ood use hot rem There is only one happiness in life, to love and be loved. 生命中只有一種幸福,愛與被愛。 Some one told me that hea

2017.5.3 4.全排列

col font ace urn color span 順序輸出 所有 一個 題目描述 給定N(N<10),按照字典序輸出所有的N排列。 輸入 第一行輸入N。 樣例輸入 3 輸出 輸出1到N的全排列,一行一個排列,按照字典序順序輸出。

2017.5.3-morning

man 4.0 time route 路徑 shutdown 實驗 acer sub 實驗目的 l 掌握RIP協議的配置方法: l 掌握查看通過動態路由協議RIP學習產生的路由; l 熟悉廣域網線纜的鏈接方式; 實驗背景 假設校園網通過一臺三層交換機連到校園網出口路由器上,

2017.5.4下午學習內容

1-1 image .cn 英語 mage http 內容 ima 單詞 總結考研英語閱讀,並聽專業相關詞匯,復習上午所學單詞2017.5.4下午學習內容

2017-5-4 線程

task void length tex bject button ring args strong 線程:幫助老板幹活的,不會幹擾老板的正常工作 如果一段代碼的執行需要時間,那麽必須開啟一個新線程來執行,如果不開線程,窗口會出現假死 開線程: Thread th = n

Python學習筆記-2017.5.4

列表 lin 覆蓋範圍 復習 處理 pytho 內部 global txt 本文章記錄學習過程中的細節和心得: 復習所學課程: 1、文件的操作:   打開文件,對文件的操作打開方式有兩種:   第一種:      f = open("test.txt", "r")#以只讀

2017隨記——5月

ubunt 註意 tro 音頻 機器學習實戰 電腦 人的 其他 優勢 記錄一:2017/05/05   以前看到交換空間的欄目,裏邊的用戶不同地區的人互換住宅,包括如今的嘀嘀打車、甚至代碼的開源,都是資源利用走向開放的應用。聯想到以前看到微軟的全息眼鏡,能不能這樣呢?我在

【考前沖刺!】2017註冊建築師考前押題

http 二級 自信 ec2 分數 font 自信心 設計 註冊   本周星期六、星期天,也就是5月6、7號,2017年註冊建築師的考試工作即將全面開啟,各位考生一定是各種忐忑,但是最重要的是考生一定要穩定情緒,拿出百分的自信,踏入考場,這裏小編先預祝大家考試過關。   

2017.5.5上午學習內容

技術分享 學習內容 分享 http alt blog log 總結 images 總結了考試分析的重點,並做了相應習題2017.5.5上午學習內容

2017 5月5日下午

通信工程 執行 平臺 同時 管理 計算 抽象 實現 -1 今天基本上完成了通信工程教學視頻中對操作系統組成的了解,主要分為以下幾部分 硬件:在單個單喝的cpu上,硬件資源是獨有的。 通用管理軟件——內核:為了實現在同一個計算機上,同時近似的運行多個程序,內核只是個平臺,不

2017.5.5PM

lin tde 使用 執行 顯示 2015年 輸出 輸入 bsp CET-6 2015年12月真題第二套的聽力和閱讀部分 管理及IO重定向 計算機五大部件:運算器,控制器,存儲器,輸入設備,輸出設備 程序:指令和數據控制器:讀取執行指令 運算器: 存儲

卡薩帝2017微生活藝術展邀您帶著顯微鏡看生活

卡薩帝4月22日,2017年度卡薩帝“放大微觀世界 還原藝術生活”微生活藝術展首站走進成都。這是繼北京微生活藝術展之後,卡薩帝再度發起關於微生活的全民探討,通過還原健康飲食、高端洗護、生態呼吸、恒溫儲酒四大真相,卡薩帝再次深入挖掘用戶在微觀層面的真實需求,邀請用戶帶著顯微鏡看生活,解用戶之惑,予用戶所需。受困

網易2017秋招編程題——回文序列 解題報告

out += stream pan 唯一性 [1] bsp names length Problem:https://www.nowcoder.com/question/next?pid=2811407&qid=46573&tid=6015849 如果一個數