初見安~這裡是傳送門:洛谷p4562 遊戲
九條可憐是乙個富有的女孩子。
她長大以後創業了,開了乙個公司。 但是管理公司是乙個很累人的活,員工們經常揹著可憐偷懶,可憐需要時不時對辦公室進行檢查。
可憐公司有 nn 個辦公室,辦公室編號是 l到 l+n-1,可憐會事先制定乙個順序,按照這個順序依次檢查辦公室。一開始的時候,所有辦公室的員工都在偷懶,當她檢查完編號是 ii 的辦公室時候,這個辦公室的員工會認真工作,並且這個辦公室的員工通知所有辦公室編號是 ii 的倍數的辦公室,通知他們老闆來了,讓他們認真工作。因此,可憐檢查完第 ii 個辦公室的時候,所有編號是 ii 的倍數(包括 ii )的辦公室的員工會認真工作。
可憐發現了員工們通風報信的行為,她發現,對於每種不同的順序 pp ,都存在乙個最小的 t(p),使得可憐按照這個順序檢查完前 t(p) 個辦公室之後,所有的辦公室都會開始認真工作。她把這個 t(p)定義為 p 的檢查時間。
可憐想知道所有 t(p)t的和。
但是這個結果可能很大,她想知道和對 10^9+7109+7 取模後的結果。
第一行輸入兩個整數 l,rl,r 表示編號範圍,題目中的 nn 就是 r-l+1r−l+1 。
乙個整數,表示期望進行的輪數。
2 4
16
考慮所有辦公室被檢查的相對順序:
,時間是 2 。 ,時間是 2 。 ,時間是 3 。 ,時間是 3 。 ,時間是 3 。 ,時間是 3 。
和是 1616 。
對於 20% 的資料,
對於另 10% 的資料,
對於另 10% 的資料,
對於另 30% 的資料,
對於 100% 的資料,
這個題的題意很奇怪啊……明明是求的所有情況耗時之和,也就是檢查的數量之和,輸出解釋寫的又成了輪數的期望了……不管,我們求的是和不是期望。
題意轉化過來就是:問你在所有的檢查順序下,哪些房間是沒有被前面的因數通報的。再換句話說,有些房間是關鍵的房間,不會被別的房間通報,也就是說沒有數以它作為倍數,除了它自己。所以說你每次檢查要花費的時間至少就是關鍵房間的數量,至多是所有房間的數量。
關鍵房間的數量很好求,假設有sum個,暴力篩就行了。接下來考慮答案怎麼算——我們設表示恰好花費時間i檢查完所有關鍵房間的情況數。那麼就有:
再看怎麼算。因為已經檢查了i個房間了,也就是說還有
公式已經有了,具體操作略。
上**——
#include#include#include#include#include#includeusing namespace std;
const int maxn = 1e7 + 4;
const int p = 1e9 + 7;
typedef long long ll;
int read()
while(isdigit(ch)) x = (x << 1) + (x << 3) + ch - '0', ch = getchar();
return x * f;
}ll fac[maxn], inv[maxn], f[maxn], ans = 0;
ll c(ll n, ll m)
ll power(ll a, ll b) return res;}
int l, r, n, sum = 0;
bool vis[maxn];
signed main()
fac[1] = fac[0] = 1;
for(int i = 2; i <= n; i++) fac[i] = fac[i - 1] * i % p;//預處理階乘
inv[n] = power(fac[n], p - 2); inv[0] = 1;//預處理逆元
for(int i = n - 1; i > 0; i--) inv[i] = inv[i + 1] * 1ll * (i + 1) % p;
for(int i = sum; i <= n; i++)
f[i] = c(n - sum, n - i) * fac[n - i] % p * sum % p * fac[i - 1] % p;
for(int i = sum; i <= n; i++) ans = (ans + i * f[i] % p) % p;
printf("%lld\n", ans);
return 0;
}
迎評:)
——end——
jxoi2018 遊戲 組合數學
首先令 n r l 1 令 k 表示區間 l,r 中存在多少個數 x 使得 x 不存在小於 x 且在區間 l,r 中的因數,我們把包含這些數的數集稱為 s 我們來先想乙個 o nk 的 min max 容斥做法吧。顯然這一題我們可以轉化為min max容斥的模型 將這k個數選完期望需要選多少次 ma...
JXOI2018 遊戲 組合數學
給定乙個區間 l,r 每次選第乙個數,把它和它後面所有它的倍數去掉,直到序列為空,操作的次數稱為這個序列的代價。求對給定序列的所有排列的代價之和。顯然對於區間內的所有數,我們可以給出這些數的乙個拓撲圖,那麼入度為零的點的個數就是必須要選的點,其它的點在必須要選的點選完以後都不用選了,因此我們只需要考...
JXOI2018簡要題解
考慮如果所有數都不同,那麼一定只有一種方案可行,需要 n 次 如果有數相同,考慮強制大小關係,最後除上每個相同數之內的排列個數 考慮如何加入新的數,明顯是越平均越好,模擬一下即可 複雜度為 o tn log n include define n 200005 define m 10000005 de...