集訓模擬賽12

2022-02-02 05:21:22 字數 4667 閱讀 9215

今天虎哥出題變簡單了,今天本來可以寫對三個題,但是\(t2\)由於沒看題目,改了乙個地方就過了,\(t3\)還把陣列開小了,導致最後少拿了超級多的分。現在後悔也沒用了,吸取教訓吧,看題:

該題與題庫中\(how\ many\ answers\ are\ wrong\)是一樣的。

刁奼接到乙個任務,為稅務部門調查一位商人的賬本,看看賬本是不是偽造的。

賬本上記錄了\(n\)個月以來的收入情況,其中第\(i\)個月的收入額為\(a_i(i=1,2,3...n-1,n)\)。當 \(a_i\)大於\(0\)時表示這個月盈利\(a_i\) 元,當 \(a_i\)小於\(0\)時表示這個月虧損\(a_i\) 元。所謂一段時間內的總收入,就是這段時間內每個月的收入額的總和。

刁奼的任務是秘密進行的,為了調查商人的賬本,她只好跑到商人那裡打工。她趁商人不在時去偷看賬本,可是她無法將賬本偷出來,每次偷看賬本時她都只能看某段時間內賬本上記錄的收入情況,並且她只能記住這段時間內的總收入。 現在,刁奼總共偷看了\(m\)次賬本,當然也就記住了\(m\)段時間內的總收入,你的任務是根據記住的這些資訊來判斷賬本是不是假的。

第一行為乙個正整數\(w\),其中\(w < 100\),表示有\(w\)組資料,即\(w\)個賬本,需要你判斷。

每組資料的第一行為兩個正整數\(n\)和\(m\),其中\(n < 100,m < 1000\),分別表示對應的賬本記錄了多少個月的收入情況以及偷看了多少次賬本。

接下來的\(m\)行表示刁奼偷看\(m\)次賬本後記住的\(m\)條資訊,每條資訊佔一行,有三個整數\(s\),\(t\)和\(v\),表示從第\(s\)個月到第\(t\)個月(包含第\(t\)個月)的總收入為\(v\),這裡假設\(s\)總是小於等於\(t\)。

包含\(w\)行,每行是\(true\)或\(false\)。

其中第\(i\)行為\(true\)當且僅當第\(i\)組資料,即第\(i\)個賬本不是假的;第\(i\)行為\(false\)當且僅當第i組資料,即第\(i\)個賬本是假的。

樣例輸入

2

3 31 2 10

1 3 -5

3 3 -15

5 31 5 100

3 5 50

1 2 51

樣例輸出
true

false

這個題其實就是帶權並查集,每一次把不同父親區間的值改變,然後與之前進行比較,如果不符就是\(false\),否則就是\(true\)

#includeusing namespace std;

const int maxn = 1e3+10;

int n,m;

int flag;

int fa[maxn],dis[maxn];

int find(int x)

void init()\le 100\)。

經典的乙個\(dp\)模型,這個題中給出了小象的移動方向,我們就可以預處理每個點能夠看到的不同種老鼠數量,然後進行狀態轉移,首先定義狀態陣列為\(f[i][j]\)是到\(i\)行\(j\)列的害怕值。

題目中給出了小象會害怕的乙個範圍:

\[|x1-x2|+|y1-y2|\le 1

\]我們就可以根據這個推出來只有老鼠在小象的上下左右時才會害怕,然後開始預處理。

但是預處理也是有點門道的,我在開始預處理的時候想的是在當前點上下左右的都加起來,但是寫完以後發現答案要大好多,仔細分析一下,我們可以發現幾個特點:

\(1\)、當前點由左邊或上邊轉移而來,所以左邊或上邊已經能夠看到當前點的左邊和上邊的點,所以只需要預處理該點下和右邊的數量。

\(2\)、當前點是從左或上轉移而來,如果上邊的點仍然從上邊轉移來,那麼該點的左邊一定是沒有統計過的,而從左邊轉移來的點上一次轉移還是左邊也是一樣的,該點上邊的點一定沒有統計,所以我們就需要第三維來記錄從左還是上轉移而來。陣列也就變成了\(f[i][j][1]\),和\(f[i][j][0]\),分別表示從左邊來還是從右邊來。如果一直從左轉移,那麼需要加上上邊的害怕值,從上同理。

那麼我們這樣就得到了狀態轉移方程和預處理。預處理\(val[i][j]\)陣列表示第\(i\)行\(j\)列會得到的害怕值,根據上邊的分析得到只需要看這個點右邊和下邊即可。然後就是狀態轉移方程:

\[f[i][j][1] = min(f[i][j-1][1]+val[i][j]+a[i-1][j],f[i][j-1][0]+val[i][j]);

\]\[f[i][j][0] = min(f[i-1][j][1]+val[i][j],f[i-1][j][0]+val[i][j]+a[i][j-1]);

\]最後只需要比較\(f[i][j][1]\)和\(f[i][j][0]\)的最小值就好了。

#includeusing namespace std;

const int maxn = 1e3+10;

int a[maxn][maxn],f[maxn][maxn][3];

int val[maxn][maxn];

int n,m;

int main()

} for(int i=0;i<=n;++i)

} memset(f,0x3f,sizeof(f));//初始化極大值

f[1][0][0] = f[1][0][1] = val[1][0];//邊界初始化

f[0][1][0] = f[0][1][1] = val[0][1];

f[1][1][0] = f[1][1][1] = 0;

for(int i=1;i<=n;++i)

} int ans = min(f[n][m][1],f[n][m][0]);//統計最小值

printf("%d\n",ans);

return 0;

}

\(farmer\ john\)正在乙個新的銷售區域對他的牛奶銷售方案進行調查。他想把牛奶送到\(t\)個城鎮 \((1 \le t \le 25,000)\),編號為\(1\to t\)。這些城鎮之間通過\(r\)條道路 \((1 \le r \le 50,000\),編號為\(1\)到\(r)\) 和\(p\)條航線 \((1 \le p \le 50,000,\)編號為\(1\)到\(p)\) 連線。每條道路\(i\)或者航線\(i\)連線城鎮\(a_i (1 \le a_i \le t)\)到\(b_i (1 \le b_i \le t)\),花費為\(c_i\)。對於道路,\(0 \le c_i \le 10,000\);然而航線的花費很神奇,花費\(c_i\)可能是負數\((-10,000 <= c_i <= 10,000)\)。道路是雙向的,可以從\(a_i\)到\(b_i\),也可以從\(b_i\)到\(a_i\),花費都是\(c_i\)。然而航線與之不同,只可以從\(a_i\)到\(b_i\)。事實上,由於最近恐怖主義太囂張,為了社會和諧,出台 了一些政策保證:如果有一條航線可以從\(a_i\)到\(b_i\),那麼保證不可能通過一些道路和航線從\(b_i\)回到\(a_i\)。由於\(fj\)的奶牛世界公認十分給力,他需要運送奶牛到每乙個城鎮。他想找到從傳送中心城鎮\(s(1 <= s <= t)\) 把奶牛送到每個城鎮的最便宜的方案,或者知道這是不可能的。

第\(1\)行:四個空格隔開的整數: \(t, r, p, and s\)

第\(2\)到\(r+1\)行:三個空格隔開的整數(表示一條道路):\(a_i, b_i\) 和 \(c_i\) 第\(r+2\)到\(r+p+1\)行:三個空格隔開的整數(表示一條航線):\(a_i, b_i\) 和 \(c_i\)

第\(1\)到\(t\)行:從\(s\)到達城鎮\(i\)的最小花費,如果不存在輸出"no path"。

6 3 3 4

1 2 5

3 4 5

5 6 10

3 5 -100

4 6 -100

1 3 -10

樣例輸入解釋:一共六個城鎮。在\(1-2,3-4,5-6\)之間有道路,花費分別是\(5,5,10\)。同時有三條航線:\(3\to 5, 4\to 6\)和\(1\to 3\),花費分別是\(-100,-100,-10\)。\(fj\)的中心城鎮在城鎮\(4\)。

no path

no path50

-95-100

樣例輸出解釋:\(fj\)的奶牛從\(4\)號城鎮開始,可以通過道路到達\(3\)號城鎮。然後他們會通過航線達到\(5\)和\(6\)號城鎮。 但是不可能到達\(1\)和\(2\)號城鎮。

貼個鏈結,\(lc\)大佬已經解釋的超級詳細了:

詳細分析

再貼個**:

詳細分析、

#includeusing namespace std;

#define ll long long

const int maxn = 1e5+10;

const ll mod = 1000000007;

ll n;

ll a[maxn],f[maxn],sum[maxn],s[maxn];

ll pai[maxn];

ll quickpow(ll a,ll b)

return ans%mod;

}int main()

f[1]=a[1];

sum[1]=f[1];

for(int i=1;i<=n;++i)

printf("%lld\n",f[n]%mod);

return 0;

}

省選集訓2022 模擬賽12

題目描述 考慮以下在 m 維空間的遊走過程 初始時你在原點,即每一維座標為 0 的位置。接下來依次有 sum m t i 次操作,分為 m 1 個階段。第 0 個階段有 t 0 次操作,每次操作可以不動或者選擇任意一維向其正方向前進 1 個單位長度。第 i 1 leq i leq m 個階段有 t ...

集訓模擬賽2

題目描述 這裡 b 表示該格仔放的物件黑色面朝上 w 表示該格仔放的物件白色朝上。如果我們選擇翻轉第三行的第乙個物件,那麼格仔狀態將變為 bwbw bwww wwwb wwwb 遊戲的目標是翻轉到所有的物件白色朝上或黑色朝上。你的任務就是寫乙個程式來求最少的翻轉次數來實現這一目標。輸入格式 輸入檔案...

6 28集訓 集訓模擬賽2

第一題 n只有4,直接暴力 第二題 tarjan縮點之後跑乙個最長路 第三題 dp 第四題 思維量較大 n 的範圍很小,所以我們考慮狀壓dp 我們設 f i j k m 為第一行的狀態為 i 第二行的狀態為 j 第三行的狀態為 k 第四題的狀態為 m 所需要的最小步數 所以我們暴力列舉6重迴圈,時間...