根據題意可以得出分母的範圍為:1-30,對於每個a[j]是p^i到p^(i+1)範圍內分母都為i+1,對於每個pi最多可以把a[i]數列分為30組,所以列舉每個pi在a[i]中進行二分查詢。然後用字首和處理下a[i]/j。
#include
using namespace std;
typedef long long int ll;
const int n=500005+10;
const int mod=1e9;
#define mem(a,b) memset(a,b,sizeof(a))
int a[n],p[n];
int flag[n],dp[33][n];
void init(int n)
}}int main()
sort(a+1,a+1+n);
init(n);
for(int i=1;i<=m;i++)
ll tmp=1,cnt;
ll sum=0,ans;
for(int i=1;i<=m;i++)
if(flag[cnt]for(int j=1;j<=cnt;j++)
sum=(sum+ans*i)%mod;
}printf("%lld\n",(sum+mod)%mod);
}return
0;}
2020浙江省省賽 B
傳送門 輸入n,k分別表示n個a i 體積物品,箱子最大容量為k,求第一種操作和第二種操作需要多少個箱子。有兩種操作,第一種操作是從1 i 1之間有沒有可以放下第i個物體體積的箱子,箱子編號越前面越好 第二種操作1 i 1之間有沒有可以放下第i個物體體積的箱子,使得箱子數最少。第二種操作很好想直接l...
2018浙江省省賽 ZOJ4024 4036
4024 題意找到這裡面是否有乙個數k,在k前面都是遞增,後面都是遞減 思路遍歷 判斷 找乙個k位置,這個位置前都是遞增,這個位置後都是遞減 for in range int input n int input an list map int input split ai an 0 f 2for i...
2015浙江省賽
zoj 3872 beauty of array 對於每個數,計算這個數被累加的次數。找到這個數左邊這個數出現的地方,在這之間的所有數的數量 這個數後面的數的數量,即為這個數被計算的次數 include include typedef long long ll int a 1000005 post ...