Bestcoder round 32 解題報告

2021-07-11 21:30:18 字數 2899 閱讀 8434

按照題目要求寫出cmp函式,sort一下就行了。

#include

#include

#include

#include

#include

#include

using

namespace

std;

struct node

a[1100000];

int n;

int cmp(node a,node b)

sort(a,a+n,cmp);

for (int i=0;iif (i!=0) printf(" ");

printf("%d",a[i].id);

}printf("\n");

}return

0;}

我們把字首和s[

i],從後往前依次插入到set裡,如果當前下標為奇數,我們需要找set中是否存在乙個數

x ,使得x−

s[i]

=−k,即

x=−k

+s[i

] ;如果當前下標為偶數,我們需要找set中是否存在乙個數

x ,使得x−

s[i]

=k,即x

=k+s

[i] 。卡著記憶體過的。。。

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

typedef

long

long ll;

int t;

ll a[1100000],s[1100000];

int n,cas;

ll k;

set s;

int main()

for (int i=n;i>=0;i--)

}else}}

if(flag) printf("case #%d: yes.\n",++cas);

else

printf("case #%d: no.\n",++cas);

}return

0;}

首先判斷已有的括號序列是否合法,以及n是否為奇數。我們設已有的括號序列中有a個左括號,b個右括號。因為總序列長度為n,我們設m=n/2,那麼最終的括號序列有m個左括號和m個右括號。題目的答案相當於從(a,b)到(m,m)且不超過y=x這條線的方案數。很容易發現,這個答案相當於找從(0,0)到(p,q)且不超過y=x這條線的方案數,p=m-a,q=m-b。這個答案就相當於(0,-1)到(p,q-1)切與y=x這條線沒有交點的方案數。因為從(0,-1)到(d,d)的方案數相當於從(-1,0)到(d,d)的方案數,則不合法的答案數相當於從(-1,0)到(p,q-1)且與y=x有至少乙個交點的答案數,很容易發現,從(-1,0)到(p,q-1)的路線必與(p,q-1)有交點,所以不合法的答案數即為從(-1,0)到(p,q-1)的路線數。則原答案為cp

p+q−

cq−1

p+q=

(p−q

+1)c

qp+q

p+1

。組合數的值可以利用預處理得到。

#include

#include

#include

#include

#include

#include

using

namespace

std;

typedef

long

long ll;

const ll mod=1e9+7;

int l,n;

char s[1100000];

ll inv[1100000],ff[1100000],f[1100000];

int flag,tail;

ll a,b;

ll c(int n,int m)

int main()

for (int i=2;i<=1000010;i++)

inv[i]=(inv[i-1]*inv[i])%mod;

while (scanf("%d",&n)==1)

tail=0;

for (int i=0;iif (s[i]=='(') tail++,a++;

else

tail--;

}if (flag)

ll m=n/2;

ll p=m-a,q=m-b;

ll ans=c(a+b,a);

ans=(ans*(p-q+1))%mod;

ans=(ans*ff[p+1])%mod;

cout

0;}

很容易發現,x1

到xn 中最多只有1~n−

−√這些數。我們設dp[i][j]表示利用前i種數字到達和j的方案數。那麼dp[i][j]=dp[i][j-i]+dp[i-1][j-i]。表示前乙個數是i或者i-1。o(n*n−

−√)的時間內可以得到答案。

#include

#include

#include

#include

#include

#include

using

namespace

std;

int t,cas;

int n,m;

int dp[400][51000];

int ans;

int main()

printf("case #%d: %d\n",++cas,ans);

}return

0;}

BestCoder Round 1 解題報告

最近聽到splay學長說有乙個 叫bestcoder,題目質量挺不錯,而且難度在noip提高組水平,比較適合我刷 重點是不像cf那樣要翻牆,深夜打比賽,而且它還支援在hdu上提交 於是我有空跑過去看了看,見到只有6頁比賽嘛,於是決定從頭開始做 但願暑假能刷完吧。題目傳送門 題目分析 剛開啟這題就見到...

BestCoder Round 40 解題報告

這場是第一場沒有公尺的bc.大概也是想震一震那些一聽說沒公尺了就不打bc的人吧 這次的題目質量比以往高了許多 然而我並沒有打這一場bc 但是今天下午到現在做的過程中真的學到了不少知識呢 a題略水.1 include2 include3 include4 include5 intt,n 6int ma...

關於 0x3f3f3f3f 的問題

0x3f3f3f3f是乙個很有用的數值,它是滿足以下兩個條件的最大整數。1 整數的兩倍不超過 0x7f7f7f7f,即int能表示的最大正整數。2 整數的每8位 每個位元組 都是相同的。我們在程式設計中經常需要使用 memset a,val,sizeof a 初始化乙個陣列a,該語句把數值 val ...