1. 程式人生 > >幾道不錯的TC題

幾道不錯的TC題

文章目錄


如果大家在TC的哪一場見到過這幾題務必告訴我,我將不勝感激.

T1

n ,

a [ i ]
, b [ i ]
, : ( a [ i ] 1 ) , ( b [ i ] + 1 ) ; ( a [ i ] ) , b [ i ] ; ( a [ i ] + 1 ) , ( b [ i ] 1 ) . c [ i ] , k . 1. n個盒子,每個盒子標籤貼著有a[i]個紅球,有b[i]個藍球,但實際上有可能有三種情況:\newline (a[i]-1)個紅球,(b[i]+1)個藍球;\newline (a[i])個紅球,b[i]個藍球;\newline (a[i]+1)個紅球,(b[i]-1)個藍球.\newline 買一個盒子需要c[i]的錢,求最少需要多少錢才能夠保證獲得k個球.不能輸出-1.
要想保證獲得 k k 個球有三種方法:

  1. 第一種,直接去找紅色球,買 i i 個盒子,盒子裡表明紅球的總個數是 k + i k+i 或者更多.
  2. 同理,直接去買藍色球.
  3. 買的盒子裡的紅藍兩種球的總個數是 2 × k 1 2\times k-1 或者更多,這樣子不管如何,都能夠有一種球的個數大於或者等於 k k .

我們利用這樣的思路,跑三次01揹包,求出花費的最小值.
轉化清奇的一道01揹包,不錯的題.

#include<bits/stdc++.h> //Ithea Myse Valgulious
using namespace std;
const int yuzu=1e5,inf=0x3f3f3f3f;
typedef int fuko[yuzu|10];
fuko a,b,c,d,dp;
 
int bao(int *v,int k,int n){
int i,j;
fill(dp+1,dp+yuzu,inf);
for (i=1;i<=n;++i)
  for (v[i]--,j=k;~j;--j)
    dp[min(k,j+v[i])]=min(dp[min(k,j+v[i])],dp[j]+c[i]);
return dp[k];
}
 
int main(){
int i,n,k,j; read(n),read(k);
for (i=1;i<=n;++i) a[i]=read();
for (i=1;i<=n;++i) d[i]=a[i]+1+(b[i]=read());
for (i=1;i<=n;++i) c[i]=read();
/*d[i]=a[i]+b[i]*/
int llx=min(bao(d,k*2-1,n),min(bao(a,k,n),bao(b,k,n)));
write(llx^inf?llx:-1);
}

T2

, . . d ( i , j ) i , j . i = 0 n 1 j = i + 1 n 1 d ( i , j ) . 給一張連通無向圖,有點權有邊權.\newline定義一條路徑的難度值為該路徑上的最大點權乘最大邊權.\newline 定義d(i,j)表示i,j兩點之間路徑的最小難度值.\newline 求\sum_{i=0}^{n-1}\sum_{j=i+1}^{n-1}d(i,j).
這個東西有兩維,用普通的方法很難計算.
我們考慮用排序先消掉一維的複雜度.
將點按照點權排序,每次加入一個點,用 f l o y d floyd 更新已經加入的兩點之間的最大路和路徑的最小難度值.
資料範圍一小下來我瞬間就爆炸了,連 f l o y d floyd 都想不到了.

#include<bits/stdc++.h> //Ithea Myse Valgulious
using namespace std;
const int aoi=3058,inf=0x3f3f3f3f;
typedef int nao[aoi];
nao a,b,dis[aoi],v,id;
ll ans[aoi][aoi];
int main(){
int i,n,m,j,k;
read(n),read(m);
memset(dis,0x3f,sizeof dis);
memset(ans,0x3f,sizeof ans);
for (i=1;i<=m;++i) a[i]=read()+1;
for (i=1;i<=m;++i) b[i]=read()+1;
for (i=1;i<=m;++i){
  int d=read();
  dis[a[i]][b[i]]=min(dis[a[i]][b[i]],d);
  dis[b[i]][a[i]]=min(dis[b[i]][a[i]],d);
  }// 資料有重邊!
for (i=1;i<=n;++i)
  v[i]=read(),dis[i][i]=ans[i][i]=0,id[i]=i;
for (i=1;i<=n;++i){
  for (j=1;j<n;++j)
    if (v[id[j]]>v[id[j+1]]) swap(id[j],id[j+1]);
  }
/*資料範圍小的時候我會習慣性用氣泡排序.下面那句sort與上面的兩個迴圈效果相同.*/
//sort(id+1,id+n+1,[&](int a,int b){return v[a]<v[b];});
ll llx=0;
for (k=1;k<=n;++k){
  for (i=1;i<=n;++i)
    for (j=1;j<=n;++j)
      dis[i][j]=min(dis[i][j],max(dis[i][id[k]],dis[id[k]][j])); //floyd更新最大邊
  for (i=1;i<=k;++i)
    for (j=1;j<=k;++j)
      if (dis[id[i]][id[j]]<inf)
        ans[id[i]][id[j]]=min(ans[id[i]][id[j]],1ll*dis[id[i]][id[j]]*v[id[k]]); // 更新d(i,j)
  }
for (i=1;i<=n;++i)
  for (j=i+1;j<=n;++j) llx+=ans[i][j];
write(llx);
}

T3

超級好題,我要吹爆它!這是我見過最有意思的構造題!
n , 使 , . 1 0 18 . 構造一個長為n的序列,使得相鄰的數互質,不相鄰的數不互質.每個數小於10^{18}.

相關推薦

不錯TC

文章目錄 T1 T2 T3 如果大家在TC的哪一場見到過這幾題務必告訴我,我將不勝感激. T1 n

初學者的shell指令碼!!!!

1.取磁碟的使用率 大於百分%2 就報警或者把結果輸入一個檔案裡 #!/bin/shDisk_free=$(df -h|grep /$|awk -F "[% ]+" '{print $(NF-1)}')if [ $Disk_free -ge 3 ]thenecho "Disk Is use $Disk_fr

JAVA基礎曾作為大型網際網路公司面試題, 這些你都會了嗎?

這幾道題,挺有意思的,來..... 結果都執行過 一(這道題目考察的是對Integer的理解): 二(這道理題是考察常量池,堆記憶體,String的理解,還有intern的用法得當可以適當提升效能): 小編是一個有著5年工作經驗的java程式設計師,對於java,

【複習】c語言簡單程式設計

最近在複習c語言的一些知識點,以下是整理的幾道比較重要的程式設計題: 1.列印100-200之間的素數 為了統計素數的個數,可設定一個計數器count; 方法1: #include<stdio.h> int main() { int i = 0; int count =

面試現場簡單java演算法, 你能寫出?

這兩天小編逛論壇的時候發現一個很有意思的事情,就是一位網際網路公司的面試官分享的,他們最近想招一批java的實習生,所以他們的面試題並不難,但是前來面試的人,卻很多都掛在了幾道演算法題上,要麼就是邏輯不嚴謹,要麼就是題目都看不懂的,還有就是書寫錯誤的,這讓他感到很詫異,畢竟演算法其實對於程式設計師來

BUGKU上有意思的

misc 隱寫2 這道題真的很難想到竟然是改變了圖片的高度,不知道有沒有什麼方法可以看出來,我是最後搜尋了一下別人writeup,看到提示才知道的。 之後就用 010editor 開啟 2.png 圖片,這個軟體特別好的是有png.bt外掛,可以幫助看

【T-SQL基礎】01.單表查詢-sql查詢

概述: 本系列【T-SQL基礎】主要是針對T-SQL基礎的總結。 【T-SQL基礎】06.透視、逆透視、分組集 【T-SQL基礎】07.資料修改 【T-SQL基礎】09.可程式設計物件  ------------------------------------------

cf水

們的 表示 水題 牢固 coloring clas cin ostream nbsp 題意:給你包含n個元素的數組和k種元素,要求k種元素要用完,並且每種顏色至少用一次,n個元素,如果某幾個元素的值相同,這些個元素也不能染成同一種元素。 思路:如果元素個數n小於k或者值相同

d050: 妳那裡現在點了?

names spa clas 卻又 out pan 水題 main ostream 減去15即可(註意這個數小於15的情況) 題目:珊珊到了美國猶他州的楊百翰大學之後,文文禁不住對她的思念,常常想打電話給她,卻又擔心在美國的她是不是在睡覺。好不容易鼓起勇氣打通了電話,第一句

C語言之非常簡單的

語言 scanf void 類型 比較 簡單 bsp 增長 語句   C語言之非常簡單的幾道題(還是寫寫),比較簡單吧,主要有幾道題的數據類型(如,第三題)和語句順序(如,第二題)需要註意一小下下。 1. 求表達式S=1*2*3……*N的值大於150時,最小的N的值

大家可以看看這你們會嗎??

變量 答案 .html clu 網址 ptr 編譯 是什麽 編譯器 以下程序的結果是什麽? int i = 1;int main(){int i = i;return 0;}A: main()函數裏的i是一個未定義值 B: main()函數的i為1 C: 編譯器不允許這種寫

MT【222】自招面試真

知識 我們 真題 頭發 請問 離開 可能 水平 北京大學 1.(2015東南大學)2分鐘找杯子,4分鐘找茶葉,7分鐘燒水,爸爸花13分鐘給家訪的老師泡茶,請問你怎麽看? 2.(2014復旦大學)共有5頂帽子,三個黑的兩個白的,三個人排成一排,並讓這三個人每個人選擇一頂戴上

面試中經常會問的智力,來看看你會做

轉載自   面試中經常會問的智力題,來看看你會做幾道 下面是大部分題目來自滴滴出行2017秋招題。開始頭腦風暴吧~~~ 問題 question one 有50家人家,每家一條狗。有一天警察通知,50條狗當中有病狗,行為和正常狗不一樣。每人只能通過觀察

簡單的基礎程式設計

列印1到100之內的整數,但數字中包含7的要跳過, 每行輸出7個滿足條件的數,之間用空格分隔,列印格式如下: 1 2 3 4 5 6 8 列印滿足條件的資料的個數 public class Demo { public static void main(String[] args) {

簡單的基礎編程

rgs pre ont 思路 code 數字 sql 修改 for 打印1到100之內的整數,但數字中包含7的要跳過, 每行輸出7個滿足條件的數,之間用空格分隔,打印格式如下: 1 2 3 4 5 6 8 打印滿足條件的數據的個數 public class Demo {

素數的(c語言版本)

求素數一直以來是c語言的經典題目,下面是PAT做題過程中想到的幾道素數小題,整理如下: 1 求素數的兩種方法 1.1 判斷n是否能被1~n-1整除 #include<stdio.h> int main() { int i, n; scanf("%d", &

這次是有丶意思的

給出百家姓. 然後使用者輸入一個人的名字. 判斷這個人是否是百家姓中的姓氏單姓可以直接用成員檢測,但複姓不可以,不然...就會有些比較喜感的組合也會被判定為姓氏了,還有幾個特殊情況,比如姓',','.'什麼的..另外,百家姓最後一句本身也是特例 name = input('input your nam

CTF隱寫術的

之前專攻隱寫術時寫過一些writeup,留在這裡吧。(下面的黑體是題目名字吧) (參考別人的writeup,以及自己做的) 密碼學 MD5的特徵就是由大寫字母、小寫字母以及數字組成的32位或者16位的字串。 Base64特點:編碼之後的結果,只有64個字元a-z,A-Z,0-9

JS演算法

笛卡爾乘積 示例輸入:['1', '2'], ['a', 'b'], ['+', '-', 'x'] 示例輸出:["1a+", "1a-", "1ax", "1b+", "1b-", "1bx",

計數

5921. 【NOIP2018模擬10.22】種花 題意: 給定一個 n