A Greatest Convex 簽到題,注意到x=k-1必定滿足題意。
創(chuàng)新互聯(lián)于2013年成立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元蘿北做網(wǎng)站,已為上家服務(wù),為蘿北各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:028-86922220#includeusing namespace std;
void solve() {
int n;
cin >>n;
cout<< n - 1<< endl;
return;
}
int main() {
int n;
cin >>n;
while (n--) {
solve();
}
return 0;
}
B Quick Sort 其實(shí)就是找大的不需要進(jìn)行題目中sort操作的序列,那一定是按照順序的1,2,3,4……是原排列的子序列,剩下的數(shù)字就是要進(jìn)行操作的。操作數(shù)整除k并向上取整即為最終結(jié)果。
#includeusing namespace std;
void solve() {
int n, k, tp, maxs, ls = 1;
cin >>n >>k;
maxs = n + 1;
for (int i = 0; i< n; i++) {
cin >>tp;
if (maxs >tp && tp != ls) {
maxs = tp;
} else if (tp == ls)
ls++;
}
cout<< (n - maxs + k) / k<< endl;
return;
}
int main() {
int n;
cin >>n;
while (n--) {
solve();
}
return 0;
}
C Elemental Decompress
題目中給出的輸入是隨意的,因此可能出現(xiàn)數(shù)字出現(xiàn)的次數(shù)大于等于3,這種情況一定不符合題意,需要特判。然后把出現(xiàn)過2次的和出現(xiàn)0次的數(shù)字交換,并從小開始給每個(gè)出現(xiàn)2次的數(shù)字配一個(gè)最小的出現(xiàn)0次的數(shù)字,若即使這么操作仍然發(fā)現(xiàn)出現(xiàn)0次的數(shù)字比出現(xiàn)2次的數(shù)字大,則不合題意。該方法時(shí)間復(fù)雜度O(n)。
另解:也可以通過排序,a[i]>=i,且所有數(shù)字出現(xiàn)次數(shù)不能小于等于3則符合題意,排序的時(shí)候把原位置儲(chǔ)存成結(jié)構(gòu)體或pair一起排序,然后再轉(zhuǎn)化回原位置輸出結(jié)果。該方法時(shí)間復(fù)雜度O(nlog(n))也可過。
#includeusing namespace std;
void solve() {
int n;
scanf("%d", &n);
int a[n + 1];
for (int i = 1; i<= n; i++)
scanf("%d", &a[i]);
int b[n + 1], cz[n + 1], cz2[n + 1];
memset(b, 0, sizeof(b));
for (int i = 1; i<= n; i++) {
b[a[i]]++;
if (b[a[i]] == 3) {
printf("NO\n");
return;
}
if (b[a[i]] == 2)
cz2[a[i]] = i;
else
cz[a[i]] = i;
}
int c[n + 1], d[n + 1];
for (int i = 1, j = 1;;) {
if (i >j) {
printf("NO\n");
return;
}
if (j >n) {
break;
}
if (b[j] == 1) {
c[cz[j]] = j;
d[cz[j]] = j;
j++;
continue;
}
if (b[j] != 2) {
j++;
continue;
}
if (b[i] != 0) {
i++;
continue;
}
c[cz2[j]] = j;
c[cz[j]] = i;
d[cz2[j]] = i;
d[cz[j]] = j;
i++;
j++;
}
printf("YES\n");
for (int i = 1; i<= n; i++) {
printf("%d", c[i]);
if (i != n)
printf(" ");
else
printf("\n");
}
for (int i = 1; i<= n; i++) {
printf("%d", d[i]);
if (i != n)
printf(" ");
else
printf("\n");
}
return;
}
int main() {
int n;
cin >>n;
while (n--) {
solve();
}
return 0;
}
D Lucky Permutation
先舉個(gè)例子,如n=4時(shí),只有
2,1,3,4;
1,3,2,4;
1,2,4,3,三種符合題意。
這一定和1,2,3,4這樣按順序sort的排列相差一步操作。
我們先找將排列按順序sort需要的swap次數(shù),對(duì)于這個(gè)簡(jiǎn)化問題,令p[i]=i所產(chǎn)生的環(huán)的元素?cái)?shù)-1為每個(gè)環(huán)按順序sort所需的操作數(shù)。
因此,若有c個(gè)環(huán),則n-c就是所需的操作數(shù)。
在考慮原來的問題,如果有一個(gè)環(huán)里的兩個(gè)相鄰的數(shù)相差1,意味著可以不用sort這兩個(gè)數(shù),因此可以少走一步。若不存在這樣的情況,則需多走一步。
#includeusing namespace std;
void solve() {
int n;
cin >>n;
int p[n + 1], v[n + 1];
for (int i = 1; i<= n; i++) {
cin >>p[i];
}
memset(v, -1, sizeof(v));
int ans = n, flg = 1;
for (int i = 1; i<= n; i++) {
if (v[i] != -1)
continue;
ans--;
int j = i;
while (v[j] == -1) {
v[j] = i;
j = p[j];
}
}
for (int i = 2; i<= n; i++) {
if (v[i] == v[i - 1]) {
flg = -1;
}
}
cout<< ans + flg<< endl;
}
int main() {
int t;
cin >>t;
while (t--) {
solve();
}
return 0;
}
E Partical Sorting
首先,我們發(fā)現(xiàn)對(duì)于任何排列都可以使用最多3次操作達(dá)成目的。
0次操作達(dá)成目的的排列個(gè)數(shù)為cnt0=1——原排列。
1次以內(nèi)操作達(dá)成目的的排列個(gè)數(shù),要么0-n區(qū)間(左閉右開,下同)內(nèi)是位置正確的,要么2n-3n如此,注意這兩種情況分別為(2n)!,但重合了n!,故排列個(gè)數(shù)為cnt1=2×(2n!)?(n!)。
因此,本題還需求2次以內(nèi)的操作能達(dá)成目的的排列個(gè)數(shù)。
該情況下,要么最小的n個(gè)數(shù)在0-2n間,要么大的n個(gè)數(shù)在n-3n間,這樣先把這個(gè)區(qū)間內(nèi)的數(shù)sort一遍,然后再sort另一邊,需要2次。
這兩種情況分別為C(2n,n)*n!*(2n)!,并重合了一個(gè)區(qū)間。
這個(gè)重合區(qū)間要求最小n個(gè)數(shù)在0-2n間且大的n個(gè)數(shù)在n-3n間,對(duì)于這種情況,我們可以枚舉n-2n區(qū)間內(nèi)有i個(gè)這樣的數(shù),這樣的話0-n和2n-3n內(nèi)均有n-i個(gè)這樣的數(shù),最終結(jié)果為C(n,n-i)×C(n,i)×C(2n,n)?i×n!×n!×n!
故cnt2=C(2n,n)*n!*(2n)!- 求和 (C(n,n-i)×C(n,i)×C(2n,n)?i×n!×n!×n!)
總排列數(shù)顯然為cnt3=(3n)!
因此最終結(jié)果為3*cnt3-cnt2-cnt1-cnt0
#includeusing namespace std;
typedef long long ll;
#define N 3000007
ll n, mod, fac[N], ifac[N];
int fpow(int x, int t = mod - 2) {
int res = 1;
for (; t; t >>= 1, x = 1ll * x * x % mod)
if (t & 1)
res = 1ll * res * x % mod;
return res;
}
int C(int n, int m) {
if (n< m)
return 0;
return 1ll * fac[n] * ifac[m] % mod * ifac[n - m] % mod;
}
int main() {
cin >>n >>mod;
fac[0] = ifac[0] = 1;
for (int i = 1; i< N; ++i)
fac[i] = 1ll * fac[i - 1] * i % mod;
ifac[N - 1] = fpow(fac[N - 1]);
for (int i = N - 2; i; --i)
ifac[i] = 1ll * ifac[i + 1] * (i + 1) % mod;
int cnt1 = (2ll * fac[2 * n] - fac[n] + mod) % mod;
int cnt2 = 2ll * fac[n] % mod * fac[2 * n] % mod * C(2 * n, n) % mod;
int k = 1ll * fac[n] * fac[n] % mod * fac[n] % mod;
for (int i = 0; i<= n; ++i)
cnt2 = (cnt2 - 1ll * C(n, i) * C(n, n - i) % mod * C(2 * n - i, n) % mod * k % mod + mod) % mod;
int cnt3 = (fac[3 * n] + mod) % mod;
printf("%lld\n", (mod * 4 + 3ll * cnt3 - cnt2 - cnt1 - 1) % mod);
return 0;
}
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
當(dāng)前名稱:CodeforcesRound#842(Div.2)題解(A-E)-創(chuàng)新互聯(lián)
轉(zhuǎn)載注明:http://www.rwnh.cn/article26/hsjcg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、域名注冊(cè)、網(wǎng)站排名、響應(yīng)式網(wǎng)站、網(wǎng)站設(shè)計(jì)公司、品牌網(wǎng)站設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容