當(dāng)前位置:
首頁(yè) >
「LibreOJ β Round #4」子集
發(fā)布時(shí)間:2025/6/15
32
豆豆
生活随笔
收集整理的這篇文章主要介紹了
「LibreOJ β Round #4」子集
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
https://loj.ac/problem/526
題目描述
qmqmqm有一個(gè)長(zhǎng)為?n?的數(shù)列?a1,a2,……,an,你需要選擇集合{1,2,……,n}的一個(gè)子集,使得這個(gè)子集中任意兩個(gè)元素?i,j?均滿足條件?gcd(ai,aj)×gcd(ai+1,aj+1)≠1,其中gcd(i,j)表示最大公約數(shù),且這個(gè)子集的元素個(gè)數(shù)是所有滿足上述條件的子集中最多的。輸出這個(gè)子集的元素個(gè)數(shù)。
輸入格式
輸入的第一行包含一個(gè)正整數(shù)nnn。 隨后nnn行,每行一個(gè)正整數(shù)aia_ia?i??。
輸出格式
輸出一個(gè)整數(shù)代表符合條件的元素最多的子集的元素個(gè)數(shù)。
樣例
樣例輸入1
4 4 6 1 9樣例輸出1
3樣例解釋
選擇的子集為{1,2,4}\{1,2,4\}{1,2,4}。
樣例輸入2
41 71 3 5 50 75 2 19 47 88 95 92 110 111 117 58 124 130 57 129 168 161 29 39 206 79 10 142 107 209 210 222 221 223 242 104 264 265 202 279 314 315樣例輸出2
22奇數(shù)和奇數(shù)、偶數(shù)和偶數(shù)一定可以選在一起
所以對(duì)于不滿足條件的奇數(shù)和偶數(shù),連邊
求最大點(diǎn)獨(dú)立集
即點(diǎn)數(shù)-匹配數(shù)
#include<cstdio> #include<iostream> #define N 501 using namespace std; typedef long long LL; int n; LL a[N],b[N]; bool g[N][N],vis[N]; int match[N]; void read(int &x) {x=0; int f=1; char c=getchar();while(!isdigit(c)) { if(c=='-') f=-1; c=getchar(); }while(isdigit(c)) { x=x*10+c-'0'; c=getchar(); }x*=f; } void read(LL &x) {x=0; int f=1; char c=getchar();while(!isdigit(c)) { if(c=='-') f=-1; c=getchar(); }while(isdigit(c)) { x=x*10+c-'0'; c=getchar(); }x*=f; } inline LL gcd(LL p,LL q) { return !q ? p : gcd(q,p%q); } bool go(int now) {for(int i=1;i<=b[0];i++){if(vis[i] || !g[now][i]) continue;vis[i]=true;if(!match[i] || go(match[i])){match[i]=now;return true;}}return false; } int main() {read(n);LL x;for(int i=1;i<=n;i++){read(x);(x&1 ? a[++a[0]] : b[++b[0]])=x;}for(int i=1;i<=a[0];i++)for(int j=1;j<=b[0];j++)if(gcd(a[i],b[j])==1 && gcd(a[i]+1,b[j]+1)==1) g[i][j]=true;int sum=0;for(int i=1;i<=a[0];i++){fill(vis+1,vis+b[0]+1,0);if(go(i)) sum++;}printf("%d",n-sum); }
?
轉(zhuǎn)載于:https://www.cnblogs.com/TheRoadToTheGold/p/7468782.html
總結(jié)
以上是生活随笔為你收集整理的「LibreOJ β Round #4」子集的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 绝佳时机,前所未遇,开创全新购物体验
- 下一篇: win10 中的eclipse无法新建w