雅禮集訓暴力大神hxx

2021-08-14 09:31:24 字數 2290 閱讀 4793

標籤:樹形dp,字首和

暴力大神hxx

題目描述

最近連續幾場考試,hxx作為暴力組大神,連續用暴力a了幾道神題,令某些寫正解的大神很不爽。但是當大神們去詢問hxx暴力的方法的時候,hxx每次都會機智地說:「多重迴圈擺在這裡了,我怎麼知道為啥不超時!」機智的hxx可能通過某種方法隱藏他的高超暴力手段。作為大神的你趕快去揭穿他。但是他確實把多重迴圈擺在那裡了。一種可行的揭穿手段是直接計算他程式的迴圈次數。現在給你他的主要複雜度所在的迴圈。如下:

for(int a=x[1];a<=y[1];a++)

for(int b=x[2];b<=y[2];b++)

… for(int z=x[26];z<=x[26];z++)

乙個計算語句

(x[i],y[i];可能是乙個常數,也可能是之前出現過的迴圈變數,但是對於同一層迴圈的起始和終止點,至少有乙個是常數)

你需要計算那個計算語句被執行了多少次?由於答案有點大所以(ans%12015858)

輸入格式

第一行乙個數n 表示有幾重迴圈

接下來n行表示第 i行的x[i]和y[i]

輸出格式(car.out)

乙個數,表示本題的答案。

樣例輸入:

3 1 100

a 100

20 b

樣例輸出

243540

資料範圍:

對於 20% 的資料:1 ≤ n, xi, yi ≤ 20。

另 10% 的資料: yi為常數

對於 50% 的資料:1 ≤ xi, yi ≤ 1 000。(包括以上)

對於 100% 的資料:1 ≤ n ≤ 26,1 ≤ xi, yi ≤ 100 000

p.s.(

此題是送分題哦,大家盡情的虐吧!

ac了的同學,可以來想想這個資料範圍。由於某種原因所以沒有出在題目裡面。

n<=100;xi,yi<=10^18;資料都保證合法

)考試的時候沒有手玩出來,這題爆零了qwq

第i層迴圈和i-1層直接相關,和之前的層數間接相關

可以想到樹形dp

f[x][i]表示第x層迴圈取值為i時的計算結果

對於迴圈l,r中存在變數的,可以建邊,將那個變數所在迴圈向這層迴圈建邊

轉移詳見dfs過程

但是還要加入字首和優化,否則會tle

#include

#include

#include

#include

#include

#include

#define rep(i,a,b) for(ll i=a;i<=b;i++)

#define dep(i,a,b) for(ll 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=1e5+6,p=12015858;

ll f[27][maxn],n,last[maxn],cnt=0,l[maxn],r[maxn];

ll ans=1;

char ch[10];

bool vis[maxn];

struct edgee[maxn<<1];

void insert(ll u,ll v);last[u]=cnt;

}void dfs(int x)//該層迴圈已經超出範圍

if(!r[e[i].to])f[x][k]=1ll*f[x][k]*(f[e[i].to][k]-f[e[i].to][l[e[i].to]-1])%p;

else f[x][k]=1ll*f[x][k]*(f[e[i].to][r[e[i].to]]-f[e[i].to][k-1])%p;

}f[x][k]=(f[x][k]+p)%p;

}rep(i,1,maxn-1)f[x][i]=(f[x][i]+f[x][i-1])%p;//字首和累和

}int main()

rep(i,1,n)

if(!vis[i])

cout

<<(ans+p)%preturn

0;}

雅禮國慶集訓

灑落君臣契,飛騰戰伐名。杜甫 公安縣懷古 noip 前的乙個月。這浸滿熱血的虔信,真的會化作墓碑嗎?或許明日我們不再是戰友,但人生終將有無數個此時。define f z,u,v for int z u des z v z des z z struct bnd struct tup template ...

雅禮集訓 2017 價

傳送門 乙個不太顯然的最小割做法。我們這麼連邊 源點向藥物連 infty p i 容量的邊,藥物向它對應的藥材連 infty 容量的邊,藥材向匯點連 infty 容量的邊。用源點的流量減去最小割,再負回來就可以求出答案了。怎麼理解呢?割掉一條邊表示不選其對應的藥物或藥材,我們發現最後的方案一定是完美...

雅禮集訓Day4

今天炸的1p。t1,給你100次詢問,每次l,r,選 l,r 中的若干數進行異或,求有多少種結果,1 l r 1e18.做法 暴力很顯然是將l,r這些數加入線性基,然後算一下線性基里有多少個數。我們可以考慮線性基的每一位最早在多久被加入。這個就可以看l了,它二進位制的最高位很顯然是一開始就加入線性基...