洛谷 比賽題解

2021-07-24 14:01:49 字數 2839 閱讀 1196

這套題的題目質量很高,寫一發題解。

t1:cjwssb最近在物理學科上遇到了難題,他不會計算乙個電路中的總電阻,現在他找到了你,希望你能幫助他。

這個電路有如下限定

1、 電路只由導線以及電阻為一歐的電阻組成

2、 保證電路從左到右連線,即每個電阻或導線的兩個連線點xy保證x

我們可以用dfs求解,這個電路中就是普通的混連電路,我們可以考慮,對於當前節點,如果它有兩個分支,我們就分別算出這兩個分支的電阻然後用公式計算併聯後的總電阻,如果只有乙個分支,我們就讓它到下乙個分支即可,用乙個返回型別的double的函式,dfs(s,t),返回的是s,t這兩個節點中間的電阻值是多少,然後具體的細節看**就行了。

#include#include#includeusing namespace std;

#define maxn 200000

int n,m,rd[maxn],cd[maxn],l;

int pre[maxn],last[maxn],other[maxn],len[maxn];

int a[maxn],s[maxn],pp[maxn],top;

double ans;

void connect(int x,int y,int z)

double dfs(int s,int t)

else

return temp;

}int main()

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

if (cd[i]==2) s[++top]=i;

} ans=dfs(1,n);

printf("%.3lf\n",ans);

return 0;

}

t2:

cjwssb得到了你的幫助,顯得很開心,跟你道謝,你回謝了他。但隨後他由於少聽了一些詞,對你的回謝造成了誤會,這使你們兩個產生了隔閡,你很不甘心,於是打算告訴他這句話有幾種理解方式,以告訴他他誤解你了。一句話的理解方式如下

對於一句原句s1和聽到的句子s2,理解方式是用聽到的句子替換掉原句的相同部分,替換成*,使得原句形成乙個新的句子,以達到新的意思,你的任務是統計有多少種意思.

首先我們可以用kmp或者字串hash預處理出s2在s1中出現的位置,然後由於將乙個s2換成*後,s2的這個位置的字母就全不能用了,因此我們用dp統計答案,令dp[i]表示到s1考慮到i這個位置的理解方式有幾種,那麼dp[i]=dp[i-1](s1[i]不是匹配位置),dp[i]=dp[i-1]+dp[i-len2](s1[i]是匹配位置)。

#include

#include

#include

using

namespace

std;

#define maxn 100005

const

long

long mod=1000000007;

typedef

unsigned

long

long ull;

const ull base=163;

char s1[maxn],s2[maxn];

ull hash[maxn],goal,x[maxn];

int t,len1,len2,tot,cnt;

long

long dp[maxn];

bool flag[maxn];

ull geth

(int l,int r)

intmain

() printf("case #%d: %lld\n",++cnt,dp[len1]);

}return

0;

}

t3:cjwssb知道是誤會之後,跟你道了歉。你為了逗笑他,準備和他一起開始膜蛤。不過你的時間不多了,但是更慘的是你還需要完成n個膜蛤任務。假設你當前的時間為t,每個任務需要有一定的限制ti表示只有當你的t嚴格大於ti時你才能完成這個任務,完成任務並不需要消耗時間。當你完成第i個任務時,你的時間t會加上bi,此時要保證t在任何時刻都大於0,那麼請問你是否能完成這n個膜蛤任務,如果可以,輸出+1s,如果不行,輸出-1s。

我們可以貪心,首先可以知道一定是先按t公升序做b>=0的任務,然後對於b<0的任務,我們可以將其按t+b從大到小排序,我們可以用基於氣泡排序的貪心證明方法證明,具體的證明就是看如果只交換兩個任務的位置,這兩個任務的t和b滿足怎樣的關係會使其更優,然後我們按照這種關係排序即可。

#include#include#includeusing namespace std;

#define maxn 100005

int z,n,tot,cnt;

long long t;

struct vergil

t[maxn];

bool cmp(vergil a,vergil b)

int main()

else

}sort(t+1,t+tot+1,cmp);

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

if (t>t[i].t&&t+t[i].b>0) t+=(long long)t[i].b;

else

if (ok) continue;

sort(t+tot+2,t+n+1,cmp1);

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

if (t>t[i].t&&t+t[i].b>0) t+=(long long)t[i].b;

else

if (!ok) printf("+1s\n");

}return 0;

}

洛谷比賽日記

好不容易參箇賽才做幾個小時 只做了前4題,後面5題直接空著其實只是刷刷水題 工廠,模擬題 一開始zz想了半天怎麼貪心,差點去寫搜尋,最後突然發現只能按序放 秒之 一開始沒注意規模wa了,改了long long就a了 不知道為什麼有人t掉,無法理解 1 include 2 intmain 317 an...

關卡一 洛谷比賽

lj終於弄懂了任務,他需要闖過九九八十一個關卡,才能拿到鑰匙,回到主世界。為了早日回家,lj踏入了第一關。這是乙個由方塊構成的世界,連lj都被方塊化了 mc?構成這個世界的方塊只有兩種,泥土方塊和柵欄方塊。由於這是第一關,管理員為了減少難度,將三維世界抽象成二維世界,並派遣npc ljy去告訴lj,...

洛谷比賽 P5011 水 造題 題解

暴力就是o k n o kn 吧,不過n n非常之大,有101 0610 106 高精可怕.jpg 但是我們發現,對於求期望,那麼就是概率 權值,所以我們可以先求出每種動作的貢獻 每種動作出現在某個位置的概率為1kk 1 貢獻為它的val val,總共有n n個可以出現的位置,所以貢獻為 i 0k ...