要打對拍。ios
要打對拍。ide
要打對拍。spa
要手模數據。3d
要手模數據。code
要手模數據。blog
不要相信樣例。排序
不要相信樣例。it
不要相信樣例。io
不要飄。event
不要飄。
不要飄。
跟skyh學壞了。最近不打對拍。
連續十幾回考試都沒打對拍,都沒有出鍋。
可是此次就崩了。
飄了。最近是有點飄。
也算是敲響了警鐘吧。
樣例都是精心構造的,有的是故意讓你理解錯的,有的是故意讓你打錯的。
個人代碼除了樣例基本都輸出No,隨便手模了一組樣例就掛了。
僥倖拿到了30分。雖然也沒爆零,可是也足以長記性了吧。
實際上是一個大小於號打反了,判斷條件寫錯了。
要對碼下的每個字負責。
上一輪11場以rank5了結了:2330/2143/2002/1924/1895/1890/1863/1853/1796/1731/1646/1630/1619/1590/1575|機房分數線
(和諧了一句話),跟前面的三個大神和一個大臉差距極大。。。
可是上一輪整體來講,尤爲到後半,仍是比較穩的。
但是這一輪一開始就是嚴重爆炸,直接150分差敬上。。。
長記性吧,別再犯了。
T1:序列
簡單的構造題。根據A*B=N的特殊數據就能夠造了。
注意大小於號不要寫反。
1 #include<cstdio> 2 int main(){ 3 int t,n,a,b;scanf("%d",&t); 4 while(t--){ 5 scanf("%d%d%d",&n,&a,&b); 6 if(a+b-1>n||1ll*a*b<n){puts("No");continue;}; 7 puts("Yes");n-=a;b--; 8 for(int i=1;i<=a;++i)printf("%d ",n+i); 9 if(!b){puts("");continue;} 10 int sz=n/b+1,tms=n%b,sz2=n/b,tms2=b-n%b; 11 while(tms--){n-=sz;for(int i=1;i<=sz;++i)printf("%d ",n+i);} 12 while(tms2--){n-=sz2;for(int i=1;i<=sz2;++i)printf("%d ",n+i);} 13 puts(""); 14 } 15 }
T2:購物
算是半個結論,可是稍顯然。排序後考慮每一個物品的一半和前面全部物品的sum的關係,看有沒有斷檔便可。
1 #include<cstdio> 2 #include<algorithm> 3 int n;long long a[100005],sum,l[100005],r[100005],ans; 4 int main(){ 5 scanf("%d",&n); 6 for(int i=1;i<=n;++i)scanf("%lld",&a[i]); 7 std::sort(a+1,a+1+n); 8 for(int i=1;i<=n;++i) 9 if((a[i]+1>>1)>r[i-1])ans+=r[i-1]-l[i-1]+1,sum+=a[i],l[i]=a[i]+1>>1,r[i]=sum; 10 else l[i]=l[i-1],sum+=a[i],r[i]=sum; 11 ans+=r[n]-l[n]+1; 12 printf("%lld\n",ans-1); 13 }
T3:計數
看起來很難。
前序遍歷有不少性質。
(——By rvalue %%%,他講的太好了我就不想寫了)
數對的限制很難處理。怎麼突破?
能夠發如今前序遍歷肯定後,中序遍歷關係所限制的,其實就是a是否在b的左子樹內。
進一步說,b限制的是a的子樹大小。
若是在子樹內,那麼限制的就是左子樹大小的下界,不然限制上界。
因此設dp[i][j]表示以i爲根的子樹大小爲j。而後就
記憶化一發便可。
(固然也能夠直接dp參見LNC)
1 #include<cstdio> 2 #include<iostream> 3 using namespace std; 4 #define mod 1000000007 5 int liml[405],limr[405],dp[405][405],m,n; 6 int sch(int ord,int sz){ 7 if(dp[ord][sz]!=-1)return dp[ord][sz]; 8 if(!sz)return dp[ord][sz]=1; 9 dp[ord][sz]=0; 10 for(int k=liml[ord];k<sz&&k<=limr[ord];++k)dp[ord][sz]=(dp[ord][sz]+1ll*sch(ord+1,k)*sch(ord+1+k,sz-k-1))%mod; 11 return dp[ord][sz]; 12 } 13 int main(){ 14 int t,n,m,a,b;scanf("%d",&t); 15 while(t--){ 16 scanf("%d%d",&n,&m); 17 for(int i=1;i<=n+1;++i)for(int j=0;j<=n;++j)dp[i][j]=-1; 18 for(int i=1;i<=n;++i)liml[i]=0,limr[i]=n-i+1; 19 while(m--){ 20 scanf("%d%d",&a,&b); 21 if(a>b)liml[b]=max(liml[b],a-b);else limr[a]=min(limr[a],b-a-1); 22 }printf("%d\n",sch(1,n)); 23 } 24 }