標籤:鍊錶,貪心
暴力做法:
貪心,對於每個區間,從大到小排序,顯然,wi大的對答案貢獻越大
時間複雜度o(n^3 log n)
正解:
因為題目輸出實數,所以當交換次數到一定時候,對答案的影響可以忽略不計
這個t大約是30次
對每個wi的貢獻單獨計算
每個wi只對相鄰的t個產生貢獻,所以取前後各t個
計算公式如下: wi
∑x=1
t∑y=
1t(l
x−1−
lx)∗
(ry−
ry−1
)∗12
x+y−
1=2w
i(∑x
=1t(
lx−1
−lx)
∗12x
)(∑y
=1t(
ry−r
y−1)
∗12y
) 將wi從小到大排序,然後計算完就從鍊錶中無腦刪除
時間複雜度為o(nt+n log n)
25分暴力
#include
#include
#include
#include
#include
#include
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define dep(i,a,b) for(int i=a;i>=b;i--)
#define ll long long
#define mem(x,num) memset(x,num,sizeof x)
#define reg(x) for(int i=last[x];i;i=e[i].next)
using
namespace
std;
inline ll read()
while(ch>='0'&&ch<='9')
return x*f;
}const
int maxn=5e5+6;
double ans;
int n,w[maxn],bin[35];
inline
bool cmp(int x,int y)
void work(int l,int r)
int main()
正解
#include
#include
#include
#include
#include
#include
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define dep(i,a,b) for(int i=a;i>=b;i--)
#define ll long long
#define mem(x,num) memset(x,num,sizeof x)
#define reg(x) for(int i=last[x];i;i=e[i].next)
using
namespace
std;
inline ll read()
while(ch>='0'&&ch<='9')
return x*f;
}const
int maxn=1e6+6;
int _pre[maxn],_next[maxn],n,l[36],r[36];
struct nodew[maxn];
double ans,bin[36];
inline
bool cmp(node a,node b)
rep(j,1,llen)lans+=bin[j]*(l[j-1]-l[j]);
rep(j,1,rlen)rans+=bin[j]*(r[j]-r[j-1]);
ans+=lans*rans*2*w[i].val;
_pre[_next[w[i].id]]=_pre[w[i].id];
_next[_pre[w[i].id]]=_next[w[i].id];
}printf("%.4lf",ans/n/n);
return
0;}
2018雅禮集訓1 12 小C飲水記
題面 考場上sb用set,式子還沒化成o t 的,總複雜度o ntlogn n t2 70分滾粗。首先對於一段長度為 k 區間,假設按w1 wk的順序來選,貢獻為 i 1kw i2i 所以顯然要按從大到小的順序來選,然後發現本題不要求取模,所以當 i 很大時,wi 的貢獻就可以忽略不計了。所以我們只...
雅禮集訓 小C的線段樹
標籤 dp 輸出0可以騙到5分 出題人說這是最簡單的一題,果然題目順序和難度無關qwq 當n m時不存在合法的序列,所以答案為0 我們可以將區間 l,r 看成括號匹配 位置i最終的值就是左邊的左括號數量減去左邊的右括號數量 設f i l r 表示i位置左邊有l個左括號,r個右括號的方案數,ans i...
雅禮國慶集訓
灑落君臣契,飛騰戰伐名。杜甫 公安縣懷古 noip 前的乙個月。這浸滿熱血的虔信,真的會化作墓碑嗎?或許明日我們不再是戰友,但人生終將有無數個此時。define f z,u,v for int z u des z v z des z z struct bnd struct tup template ...