日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

NOIP 2015 提高组 Day2

發布時間:2025/3/15 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NOIP 2015 提高组 Day2 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

期望得分:100+10+60=170

實際得分:100+10+35=145

http://www.cogs.pro/cogs/page/page.php?aid=16

?

T1 跳石頭

時間限制:1 s?? 內存限制:256 MB

【題目描述】

這項比賽將在一條筆直的河道中進行,河道中分布著一些巨大巖石。組委會已經選

擇好了兩塊巖石作為比賽起點和終點。在起點和終點之間,有 N 塊巖石(不含起點和終 點的巖石)。在比賽過程中,選手們將從起點出發,每一步跳向相鄰的巖石,直至到達 終點。

為了提高比賽難度,組委會計劃移走一些巖石,使得選手們在比賽過程中的最短跳 躍距離盡可能長。由于預算限制,組委會至多從起點和終點之間移走 M 塊巖石(不能 移走起點和終點的巖石)。

【輸入格式】

輸入文件第一行包含三個整數 L,N,M,分別表示起點到終點的距離,起點和終 點之間的巖石數,以及組委會至多移走的巖石數。

接下來 N 行,每行一個整數,第 i 行的整數 Di(0 < Di < L)表示第 i 塊巖石與 起點的距離。這些巖石按與起點距離從小到大的順序給出,且不會有兩個巖石出現在同 一個位置。

【輸出格式】

輸出文件只包含一個整數,即最短跳躍距離的最大值。

【樣例輸入】

25 5 2 2 11 14 17 21

【樣例輸出】

4

【提示】

輸入輸出樣例 1 說明:將與起點距離為 2 和 14 的兩個巖石移走后,最短的跳躍距離為 4(從與起點距離 17 的巖石跳到距離 21 的巖石,或者從距離 21 的巖石跳到終點)。

另:對于 20%的數據,0 ≤ M ≤ N ≤ 10。 對于50%的數據,0 ≤ M ≤ N ≤ 100。

對于 100%的數據,0 ≤ M ≤ N ≤ 50,000,1 ≤ L ≤ 1,000,000,000。

?二分最短距離

如果兩塊石頭間距離比二分的還要短,

若 此時還能移走石頭,移走

否則return false

#include<cstdio> #define N 50011 using namespace std; int L,n,m,ans; int a[N]; bool check(int k) {int last=0,tot=0;for(int i=1;i<=n+1;i++) if(a[i]-a[last]<k) {if(tot<m) tot++; else return false;}else last=i;return true; } int main() {scanf("%d%d%d",&L,&n,&m);for(int i=1;i<=n;i++) scanf("%d",&a[i]);int l=0,r=L,mid;a[n+1]=L;while(l<=r){mid=l+r>>1;if(check(mid)) ans=mid,l=mid+1;else r=mid-1;}printf("%d",ans); } View Code

?

T2 子串
時間限制:1 s?? 內存限制:128 MB

【題目描述】

有兩個僅包含小寫英文字母的字符串 A 和 B。現在要從字符串 A 中取出 k 個互不重疊的非空子串,然后把這 k 個子串按照其在字符串 A 中出現的順序依次連接起來得到一 個新的字符串,請問有多少種方案可以使得這個新串與字符串 B 相等?注意:子串取出 的位置不同也認為是不同的方案。

【輸入格式】

第一行是三個正整數 n,m,k,分別表示字符串 A 的長度,字符串 B 的長度,以及問題描述中所提到的 k,每兩個整數之間用一個空格隔開。 第二行包含一個長度為 n 的字符串,表示字符串 A。 第三行包含一個長度為 m 的字符串,表示字符串 B。

【輸出格式】

輸出共一行,包含一個整數,表示所求方案數。由于答案可能很大,所以這里要求輸出答案對 1,000,000,007 取模的結果。

【樣例輸入1】

6 3 1 aabaab aab

【樣例輸出1】

2

【樣例輸入2】

6 3 2 aabaab aab

【樣例輸出2】

7

【樣例輸入3】

6 3 3 aabaab aab

【樣例輸出1】

7

【提示】

對于第 1 組數據:1≤n≤500,1≤m≤50,k=1;

對于第 2 組至第 3 組數據:1≤n≤500,1≤m≤50,k=2;

對于第 4 組至第 5 組數據:1≤n≤500,1≤m≤50,k=m;

對于第 1 組至第 7 組數據:1≤n≤500,1≤m≤50,1≤k≤m;

對于第 1 組至第 9 組數據:1≤n≤1000,1≤m≤100,1≤k≤m;

對于所有 10 組數據:1≤n≤1000,1≤m≤200,1≤k≤m。

令 f[i][j][k][0/1]表示A串前i個,分為k部分,匹配B串前j個,A串第i個不用/用 的方案數

狀態轉移方程:

如果i不用,那他就是前i-1個的和 ?f[i][j][k][0]=f[i-1][j][k][0]+f[i-1][j][k][1]

如果i用,條件是a[i]=b[j] 那么它有2種決策:自成一堆,與前一個合為一堆

? ? ? ? ? ?自成一堆的話,他的前一個可能用了,也可能沒用,又分為了兩種

所以 f[i][j][k][1]= f[i-1][j-1][k-1][1](自成一堆,前一個用了)

? ? ? ? ? ? ? ? ? ? ? ?+ f[i-1][j-1][k-1][0] (自成一堆,前一個沒用)

? ? ? ? ? ? ? ? ? ? ? ? + f[i-1][j-1][k][1] (與前一個合為一堆,前一個必須用了)

邊界條件:f[i][0][0][0]=1

邊界研究了一晚上

f數組累積的前提是 a串中的第i個與b串的第一個相等

這時第i個只能自成一堆,f[i-1][1-1][k-1][0] = 1

最后用滾動數組滾動起來就A了

#include<cstdio> #include<algorithm> using namespace std; int n,m,p,ans,s; char a[1001],b[201]; int f[2][1001][201][2]; const int mod=1000000007; int main() {scanf("%d%d%d",&n,&m,&p);scanf("%s%s",a+1,b+1);f[0][0][0][0]=f[1][0][0][0]=1;for(int i=1;i<=n;i++){int t=i%2;for(int j=1;j<=min(i,m);j++)for(int k=1;k<=min(j,p);k++){f[t][j][k][0]=(f[t^1][j][k][0]+f[t^1][j][k][1])%mod;if(a[i]==b[j]) f[t][j][k][1]=((f[t^1][j-1][k-1][0]+f[t^1][j-1][k-1][1])%mod+f[t^1][j-1][k][1])%mod;else f[t][j][k][1]=0;}ans=(ans+f[t][m][p][1])%mod;} } View Code #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; int n, m, k; long long f[2][205][205], s[2][205][205]; char a[1005], b[205]; const int mod = 1000000007; int main() {scanf("%d%d%d", &n, &m, &k);scanf("%s", a + 1);scanf("%s", b + 1);int now = 1, last = 0;f[0][0][0] = 1;for (int i = 1; i <= n; i++){f[now][0][0] = 1;for (int j = 1; j <= min(i,m); j++)for (int kk = 1; kk <= min(j,k); kk++){if (a[i] == b[j])s[now][j][kk] = (s[last][j - 1][kk] + f[last][j - 1][kk - 1]) % mod;elses[now][j][kk] = 0;f[now][j][kk] = (f[last][j][kk] + s[now][j][kk]) % mod;}swap(now, last); }printf("%lld\n", f[last][m][k]);return 0; } View Code

?

T3 運輸計劃

時間限制:1 s?? 內存限制:256 MB

【題目描述】

公元 2044 年,人類進入了宇宙紀元。

L 國有 n 個星球,還有 n-1 條雙向航道,每條航道建立在兩個星球之間,這 n-1 條航道連通了 L 國的所有星球。

小 P 掌管一家物流公司,該公司有很多個運輸計劃,每個運輸計劃形如:有一艘物

流飛船需要從 ui 號星球沿最快的宇航路徑飛行到 vi 號星球去。顯然,飛船駛過一條航道 是需要時間的,對于航道 j,任意飛船駛過它所花費的時間為 tj,并且任意兩艘飛船之 間不會產生任何干擾。

為了鼓勵科技創新,L 國國王同意小 P 的物流公司參與 L 國的航道建設,即允許小 P 把某一條航道改造成蟲洞,飛船駛過蟲洞不消耗時間。

在蟲洞的建設完成前小 P 的物流公司就預接了 m 個運輸計劃。在蟲洞建設完成后, 這 m 個運輸計劃會同時開始,所有飛船一起出發。當這 m 個運輸計劃都完成時,小 P 的 物流公司的階段性工作就完成了。

如果小 P 可以自由選擇將哪一條航道改造成蟲洞,試求出小 P 的物流公司完成階段 性工作所需要的最短時間是多少?

【輸入格式】

第一行包括兩個正整數 n、m,表示 L 國中星球的數量及小 P 公司預接的運輸計劃的數量,星球從 1 到 n 編號。

接下來 n-1 行描述航道的建設情況,其中第 i 行包含三個整數 ai, bi 和 ti,表示第i 條雙向航道修建在 ai 與 bi 兩個星球之間,任意飛船駛過它所花費的時間為 ti。 接下來 m 行描述運輸計劃的情況,其中第 j 行包含兩個正整數 uj 和 vj,表示第 j 個運輸計劃是從 uj 號星球飛往 vj 號星球。

【輸出格式】

共 1 行,包含 1 個整數,表示小 P 的物流公司完成階段性工作所需要的最短時間。

【樣例輸入】

6 3 1 2 3 1 6 4 3 1 7 4 3 6 3 5 5 3 6 2 5 4 5

【樣例輸出】

11

【提示】

所有測試數據的范圍和特點如下表所示

請注意常數因子帶來的程序效率上的影響。

?

所需 技能:二分、lca、樹鏈剖分、樹上差分

求最值,很容易想到二分,那么我們就二分這個值k

如果最短時間為k,那么如果一個計劃耗時超過k,那么它所經過的路徑上就要有蟲洞

可能有不止一個計劃耗時超過k,

那么有可能改造為蟲洞的路徑是 所有超時的計劃路徑的交集

如果這個交集中有一條路徑,耗時>= 超出的時間(即不建蟲洞的最大耗時-二分值)

那么把他改為蟲洞可以使時間減少

現在就差如何求 計劃耗時 和 交集

計劃耗時:樹鏈剖分求lca,同時求出點到根節點的距離dis

? ? ? ? ? ? ?計劃耗時=dis[起點]+dis[終點]-2*dis[lca]

交集:樹上差分

? ? ? ? 計劃起點+1,終點+1,lca-2

? ? ? ? 然后從葉子節點向上累加

? ? ? ?若點的sum等于超時計劃數,則點與父節點之間的邊在交集中

#include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #define N 300001 using namespace std; int n,m,l,r,mid,ans,maxn; int front[N],nextt[N*2],to[N*2],tot,w[N*2]; int son[N],fa[N],dis[N],deep[N]; int id[N],bl[N],cnt; int sum[N]; struct node {int s,t,lca,dis; }e[N]; void add(int u,int v,int x) {to[++tot]=v; nextt[tot]=front[u]; front[u]=tot; w[tot]=x; } void dfs(int x) {son[x]++;for(int i=front[x];i;i=nextt[i]){if(to[i]==fa[x]) continue;fa[to[i]]=x;dis[to[i]]=dis[x]+w[i];deep[to[i]]=deep[x]+1;dfs(to[i]);son[x]+=son[to[i]];} } void dfs2(int x,int top) {id[x]=++cnt;bl[x]=top;int y=0;for(int i=front[x];i;i=nextt[i]){if(to[i]==fa[x]) continue;if(son[to[i]]>son[y]) y=to[i];}if(!y) return;dfs2(y,top);for(int i=front[x];i;i=nextt[i]){if(to[i]==fa[x]||to[i]==y) continue;dfs2(to[i],to[i]);} } void dfs3(int x) {for(int i=front[x];i;i=nextt[i]){if(to[i]==fa[x]) continue;dfs3(to[i]);sum[x]+=sum[to[i]];} } int get_lca(int x,int y) {while(bl[x]!=bl[y]){if(deep[bl[x]]<deep[bl[y]]) swap(x,y);x=fa[bl[x]];}if(deep[x]>deep[y]) x=y;return x; } bool check(int k) {memset(sum,0,sizeof(sum));int h=0;for(int i=1;i<=m;i++){if(e[i].dis<=k) continue;sum[e[i].s]++; sum[e[i].t]++; sum[e[i].lca]-=2;h++;}dfs3(1);for(int i=1;i<=n;i++) if(sum[i]==h&&dis[i]-dis[fa[i]]>=maxn-k) return true;return false; } int main() {/*freopen("transport.in","r",stdin);freopen("transport.out","w",stdout);*/scanf("%d%d",&n,&m);int u,v,a;for(int i=1;i<n;i++) {scanf("%d%d%d",&u,&v,&a);add(u,v,a);add(v,u,a);}for(int i=1;i<=m;i++) scanf("%d%d",&e[i].s,&e[i].t);dfs(1);dfs2(1,0);for(int i=1;i<=m;i++) {e[i].lca=get_lca(e[i].s,e[i].t);e[i].dis=dis[e[i].s]+dis[e[i].t]-2*dis[e[i].lca];maxn=max(maxn,e[i].dis);}r=maxn;while(l<=r){mid=l+r>>1;if(check(mid)) { ans=mid; r=mid-1;}else l=mid+1;}printf("%d",ans); } View Code

?

轉載于:https://www.cnblogs.com/TheRoadToTheGold/p/6750111.html

總結

以上是生活随笔為你收集整理的NOIP 2015 提高组 Day2的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 黄色大毛片 | 欧美草比视频 | 99久久婷婷国产综合精品青牛牛 | 日韩精品视频一区二区在线观看 | 99在线观看 | 午夜视频一区二区 | av看片资源| 天堂av免费观看 | 日韩国产欧美精品 | 欧美国产精品一区二区 | 欧美成人黄色小视频 | 日本私人影院 | 黄频在线看| 四虎精品在线观看 | 亚洲第一成人av | 一个人在线观看免费视频www | 91呦呦| www.奇米| 黑人多p混交群体交乱 | av伊人久久 | 欧美在线二区 | 爱情岛黄色 | 亚洲热av| 亚洲av综合色区无码另类小说 | 国产国语亲子伦亲子 | 91福利视频免费观看 | 日韩av三级在线观看 | 9i看片成人免费看片 | 粉嫩av.com | 亚洲一区二区天堂 | 国产麻豆免费观看 | 中文字幕第七页 | 国产成人一区二区三区免费看 | 欧美一级特黄视频 | 成年人福利网站 | 狠狠久久久 | 美女精品网站 | 欧美激情视频一区二区三区在线播放 | 欧美色女人 | 亚洲色欲色欲www在线观看 | 久久99久久99精品免观看粉嫩 | 91麻豆精品 | www.美色吧.com| 国产伊人自拍 | 一区二区三区四区av | 夜夜操网站 | 日韩另类| 日韩一三区 | 中国女人毛茸茸 | 色噜噜av | 免费性爱视频 | 91视频免费看片 | 性史性dvd影片农村毛片 | 色妞网| 亚洲一区二区免费 | 美日韩免费视频 | 殴美一级片 | 人人草超碰 | 精品无码av一区二区三区不卡 | 欧美另类色图 | 日韩欧美一卡 | 2021av在线 | 久久久久99精品成人片三人毛片 | 老司机伊人 | 女女互慰揉小黄文 | www夜夜操 | 高清国产一区 | 欧美首页 | 国产精品自偷自拍 | 亚洲欧美日韩久久 | 亚洲精品传媒 | 操小妞 | 欧美日韩精品三区 | 日韩综合精品 | 国产剧情在线一区 | 极品尤物一区二区 | 国产精品视频全国免费观看 | 欧美性猛交xxxx乱大交俱乐部 | 国产欧美专区 | 91丨porny丨对白| 鲁一鲁色一色 | 亚洲欧美高清在线 | 亚洲美女综合网 | 日韩欧美一区二区一幕 | 欧美在线色 | 极品蜜桃臀肥臀-x88av | 久久久久人妻精品色欧美 | 高清精品xnxxcom | 成人免费一级视频 | 明日花绮罗高潮无打码 | 亚洲国产日韩一区无码精品久久久 | 欧美一级夜夜爽 | 精品人妻一区二区三区在线视频 | 久久久久国产免费 | 一区二区在线免费视频 | 午夜老司机福利 | 97自拍视频在线 | 色综合久久天天综合网 | 成人高潮片免费视频 |