ZJ一下:
挺好,T2打表差点出规律(最近拿PFGYL硬卡提升自己几乎没有的打表水平)
T1竟然……是个××题
T3的Floyd写死了。
T1
简单思考会发现……直接全异或起来就AC
话说T1真叫最大异或和……
#include <iostream> #include <cstring> using namespace std; int pn; int main(){ // freopen("xor.in" ,"r",stdin); freopen("xor.out","w",stdout); ios_base::sync_with_stdio(false); int T; cin>>T; while(T--){ int tot=0,b; cin>>pn; for(int i=1;i<=pn;i++){ cin>>b; tot^=b; } for(int i=1;i<pn;i++) cin>>b>>b; if(tot==0)puts("D"); else puts("Q"); } }
T2
$$egin{array}{rl}&sumlimits_{i=0}^{n}C_{n}^{i} imes C_{m}^{i+1}\=&C_{n+m}^{n+1}end{array}$$
结束。
#include <iostream> #include <cstring> #include <cstdio> #define L 222222 #define N 2222 #define LL long long using namespace std; const int Mod=1e9+7; char st[L]; LL fac[2*L],inv[2*L]; LL pre[L],aft[L],ans; LL ppow(LL a,LL b){ LL res=1; a%=Mod; while(b){ if(b&1)res=res*a%Mod; a=a*a%Mod; b>>=1; } return res; } LL C(LL n,LL m){ if(n<m)return 0; return fac[n]*inv[m]%Mod*inv[n-m]%Mod; } int main(){ // freopen("easy.in" ,"r",stdin); freopen("easy.out","w",stdout); fac[0]=inv[0]=1; for(int i=1;i<=400000;i++){ fac[i]=fac[i-1]*i%Mod; inv[i]=ppow(fac[i],Mod-2); } scanf("%s",st+1); int len=strlen(st+1); for(int i=1;i<=len;i++){ pre[i]=pre[i-1]; if(st[i]=='(') pre[i]++; } for(int i=len;i>=1;i--){ aft[i]=aft[i+1]; if(st[i]==')') aft[i]++; } for(int i=1;i<=len;i++){ if(st[i]=='('){ // cout<<"The"<<i<<endl; /* for(int j=0;j<=pre[i-1];j++){ // cout<<"Pre:in"<<pre[i-1]<<" get:"<<j<<" Ws:"<<C(pre[i-1],j)<<endl <<"Aft:in"<<aft[i+1]<<" get:"<<j+1<<" Ws"<<C(aft[i+1],j+1)<<endl; ans=(ans+C(pre[i-1],j)*C(aft[i+1],j+1)%Mod)%Mod; } */ ans=(ans+C(pre[i-1]+aft[i+1],pre[i-1]+1))%Mod; } } printf("%lld ",ans); }
T3
快速幂2套矩阵乘(Floyd)
话说暴力写跪还没调(diao)出来……