成功者絕不放棄 jzoj 2017 8 17 B組

2021-08-07 01:39:26 字數 3906 閱讀 2076

【noip2013模擬】能量獲取 (standard io)

time limits: 1000 ms memory limits: 131072 kb detailed limits

goto problemset

description

input

第一行乙個整數n,表示除根節點之外的其他節點的數量。

接下來n行,第i+1行有三個整數fi、ei、wi,分別表示i號節點的父節點、i號節點上封印石的能量需求、連線節點i與fi的邊最多能傳遞多少能量。

output

最多能滿足多少顆封印石的能量需求。

sample input

4 0 3 2

0 100 100

1 1 1

2 75 80

sample output

data constraint

對於100%的資料,滿足1<=n<=1000,0<=fi<=n,0<=ei,wi<=100

題解:每次選取能量需求最小的節點,掃瞄它到根節點的路徑上的邊的容量,看能否滿足,如果能滿足就把它到根節點的路徑上的邊的容量都減去它的需求即可。

當然有dalao用樹形dp過了,但我不會。

#include

#include

#include

#include

using

namespace

std;

int fa[1010],w[1010];

struct hh

a[1010];

int n,ans;

bool come(hh a,hh b)

sort(a+1,a+n+1,come);

int j;

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

cout

0;}

【noip2013模擬】封印一擊 (standard io)

time limits: 1000 ms memory limits: 131072 kb detailed limits

goto problemset

description

input

第一行乙個整數n。

接下來n行每行兩個整數ai、bi,第i+1行表示第i種元素的封印區間。

output

兩個用空格隔開的證書,第乙個數十能夠獲得最多總能量的封印力度e,第二個數是獲得的總能量大小。當存在多個e能夠獲得最多總能量時,輸出最小的e。

sample input

5 10

20 25

sample output

10 30

data constraint

對於50%的資料,1<=n<=1000,1<=ai<=bi<=10000。

對於100%的資料,1<=n<=10^5,1<=ai<=bi<=10^9。

題解:很容易想到,最優解的e肯定是某個區間的右端點!

所以我們把所有區間的左右端點取出,從小到大排序,掃瞄一遍。

維護乙個變數sa,表示掃瞄到的值為p時,左端點大於p的所有區間的左端點之和;維護乙個變數sp,表示掃瞄到的值為p時,p在左右端點之間的區間個數。那麼此時可以封印一擊得到的能量就是sa+sp*p。

掃瞄時遇到乙個左端點,sa減去這個左端點,sp加一;遇到乙個右端點,sp減一即可。

#include

#include

#include

#include

#define n 100010

#define ll long long

struct hh

c[2*n+2];

int a[n],b[n],n;

ll ans=-1,sa,sp,k;

bool come(hh a,hh b)

using

namespace

std;

int main()

sort(c+1,c+2*n+1,come);

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

else

【noip2013模擬】歸途與征程 (standard io)

第一行為字串a。

第二行為字串b。

output

輸出在b的所有迴圈同構串中,有多少個能夠與a匹配。

sample input

輸入1:

aaaa

aaaa

輸入2:

a*aaaaaaa

輸入3:

a*b*c

abacabadabacaba

sample output

輸出1:

輸出2:

輸出3:

data constraint

對於30%的資料,m<=20;

對於80%的測試點,m<=200;

對於100%的測試點,1<=n<=100,1<=m<=100000。

那個我還沒寫出,先貼一下官方的題解啊:

第三題 歸途與征程 from lydrainbowcat

型別:動態規劃

演算法一:模擬最長公共子串行的dp方法 (o(nm^2) 80分)

首先列舉b的m個迴圈同構串。f[i,j]表示a串前i個字元和b串前j個字元能否匹配。

如果a[i]=b[j],f[i,j]=f[i-1,j-1];

如果a[i]='*',f[i,j]=f[i-1,j] or f[i,j-1] or f[i-1,j-1]。

邊界:f[0,0]=true,如果a[1]='*',f[1,0]=true,其餘為false。

演算法二:dp+rkhash (o(nm) 100分)

首先按'*'把a串分成幾段,從前往後第i段給乙個hash值i,這樣的hash值最多有(n+1)/2個。

f[i,j]表示在b串的第i個位置之後,第一次出現hash值為j的串的位置。

把b串前m-1個字元複製乙份接在b串後面,列舉起始位置1~m,然後利用f[i,j],依次向後找a串的那些段最早出現的位置,判斷最後到達的位置和起始位置的差是否超過了m即可。但是要注意如果a串開頭、結尾不是'*',要先把開頭結尾處理掉。

本題資料不好做,可能我做的比較弱(本來就只有兩個大點)。ac我的資料的程式可能還少處理了很多特殊情況,建議ac的童鞋搜一下codeforces gym的pattern matching這道題,去cf上提交下。

#include

#include

#include

#include

using

namespace

std;

unsigned

long

long c[110],p[110],g[110],temp;

char a[110],b[200010];

int f[200010][52],d[110],n,m,t,i,j,k,l,ans;

int main()

for(i=1;i<=m;i++) b[m+i]=b[i];

for(j=1;j<=t;j++) f[m*2+1][j]=f[m*2+2][j]=m*2+1;

for(i=m*2;i;i--) }

for(i=1;i<=m;i++)

if(!flag||j==0&&n!=m) continue;

for(k=1,l=i;k<=t-(a[n]!='*');k++)

if(k>t-(a[n]!='*')&&l<=i+m-(n-j)) ans++;

} cout

0;}

士兵突擊 絕不放棄

王寶強,青年影視演員。出生於河北南和縣大會塔村的王寶強,6歲時開始練習武術,8歲 14歲在嵩山少林寺做俗家 之後來到北京闖天下。主要作品有 電影 天下無賊 盲井 電視劇集 暗算 殷商傳奇 士兵突擊 開心妙手 農村娃從少林俗家 到著名演員的成名經歷。從 少林俗家 到北漂演員 8歲的時候,王寶強去了少林...

成功者的習慣

今天在網上看到這篇勵志文章 成功者的習慣 成功是一種習慣,失敗也是一種習慣。你的習慣無法改變,但可以用好的習慣來替代。成功很簡單,只要簡單的事情重複做,養成習慣,如此而已。以下是成功者十三個價值連城的習慣,我們稱之為 百萬元的習慣 習慣一 成功者清楚地了解他做每一件事情的目的。成功者雖重視事情的結果...

成功者經驗18條

沒有拜讀文學,將失去心靈的平靜與生命的趣味。沒有研究歷史,將缺乏商人的謀略。對趨勢與程序的無知,將無法知道自己現身在何處。沒有實踐,永遠是紙上談兵。沒有定位,將無法突出重圍,出人頭地。沒有目標,必將終日悶悶不樂。沒有思考,語言將不具殺傷力。沒有質量的人脈,將反成為一種拖後腿的包袱。沒有總結,將無法清...