1. 程式人生 > 實用技巧 >第五屆NWU ACM-ICPC新生賽E題題解

第五屆NWU ACM-ICPC新生賽E題題解

E.zy與魔法石

tag:模擬,貪心

cf分值:1400

出題人前言:本來想著這個題大家推出規律就可以直接模擬AC的,因為資料範圍給的挺舒適,本來定位是簽到題級別的。但是現場只有Aklice一個人過,作為出題人還是覺得很不滿意的,很多人是題讀錯了。

解法:推出規律其實發現,n大小的揹包想盡可能多裝不同的數,所以只需要模擬就行,先從小到大(從2開始)塞,塞到足夠大之後發現會有一些是多餘的,這個時候再反向往前塞就行。注意一下當n=1時的特判。

std程式碼:

#include<bits/stdc++.h>
using namespace std;

const int mod=1e9+7
; int main(){ int n; cin>>n; if(n==0){ cout<<0; return 0; } int temp=0,p=1; for(int i=2;i<=n;i++){ if(temp+i>n) break; temp+=i; p=i; } n-=temp; long long r=1; for(int i=p;i>=2;i--){ if(i==p && n-(p-1
)>0) r=(r*(p+2))%mod; else if(n>0) r=(r*(i+1))%mod, n--; else r=r*i%mod; } cout<<r; }
View Code