杭二集訓 2019 8 17

2022-05-11 15:58:24 字數 1858 閱讀 7634

題目意思:給出l,r,p,求區間[l,r]之間有多少數的最小質因子是p。

資料範圍:1<=l<=r<=1000000000,1<=p<=1000000000

考慮設\(f(x,y)\)表示從1到\(x\)中最小質因子為\(y\)的數的個數,則有

\[f(x,y)=\lfloor \rfloor -\sum_^ \rfloor,y-1)} f(\lfloor \rfloor,k)

\]其中\(pri\)為質數集合,特別的,當\(y \notin pri\)時,此函式返回0

#include#define int long long

using namespace std;

const int n=1e7+1;

int l,r,p;

int isprime(int x)

int calc(int x,int p)

int read()

while(isdigit(ch))

return x*f;

}signed main()

題目意思:定義乙個可重正整數集合是好的,當且僅當該集合中任意兩個數之和不為質數。給你乙個序列,希望你從中取出乙個盡量大的好的集合。

資料範圍:n<=3000,1<=hi<=100000

我們知道,除了2以外的質數都是奇數,而只有奇數+偶數=奇數

則我們考慮將集合分為奇數和偶數,將和為質數的兩個數連邊,然後網路流最小割

在此之前特判一下2的情況就行了

#includeusing namespace std;

const int n=3003;

const int m=2e5+1;

const int inf=1947483647;

int ans,n,cnt=1,head[n],a[n],cur[n];

int s,t,pos,tot,vis[m],pri[m];

struct edgeedge[n*n];

void prepare() }}

void ins(int x,int y,int z)

int read()

while(isdigit(ch))

return x*f;

}namespace networkflow

for(int i=head[x];i;i=edge[i].nxt)

if(!dep[edge[i].to]&&edge[i].v)

}return dep[t];

} int dfs(int x,int rest)

}return flow;

} int dinic()

return maxflow; }}

int main()if(a[i]==1) pos=i;

}s=n+1,t=s+1;

for(int i=1;i<=n;i++)

} int maxmatch=networkflow::dinic();

printf("%d\n",n-maxmatch);

return 0;

}

題目意思:給定乙個長度為n的數列ai,求乙個最長的ai的子串行bi,滿足對於任意i,\(b_i\)=\(b_\)

qaq

#includeusing namespace std;

const int n=1e5+1;

int n,ans=1,a[n];

int read()

while(isdigit(ch))

return x*f;

}int main()printf("%d\n",max(ans,re));

return 0;

}

杭二集訓 質數

標籤 哥德 猜想 質數 prime 題目描述 將1 n分成盡可能少的集合,使得每個集合的元素和均為質數。輸入資料 一行乙個正整數n。輸出資料 第一行乙個正整數m表示最少集合數,第二行n個 1,m 中的整數,第i個整數表示i在第幾個集合中。若有多種方案輸出任意一種即可。若無解輸出 1。樣例輸入 8 樣...

第二週集訓總結

這一周下來主要是對上乙個週看的前三章做乙個 的實現,雖然 有模板和例題,但是仍然有幾個演算法沒有完成實現。對於第一章的內容,我關注的重點是二進位制轉化和二分,在這週的最後幾天也有狂刷二分的題 雖然並沒有刷太多道 但是對二分的題目還是不太熟悉。昨天的最後一道題,一開始並沒有想到用二分,但是在別人拿到一...

8 1 集訓日記

今天看了有關容斥原理的幾篇部落格。容斥原理的基本思想是 先不考慮重疊的情況,把所有物件的數目求出,然後再把計數時重複計算的數目排斥出去,使得計算的結果既無遺漏又無重複。首先是乙個經典的互素問題 hdoj 4135 co prime 題目大意是 給定a,b,n,求區間 a,b 中與n互素的數的個數。思...