cf B Pairs(思維 列舉)

2021-09-29 08:04:27 字數 1303 閱讀 9073

題意:給你m組二元組(x,y),問你是否可以找到兩個點,使得每個二元組裡都含有這連個點之一。

思路:首先,我們先分析下題意。

讓找兩個點,使得每個二元組都含有這兩個之一,那麼任意乙個二元組中都含有這兩個點之一。

我們不妨列舉第乙個二元組。

下面分類討論,

1、這個二元組的兩個點恰好是要找的那兩個點。

2、這個二元組可能只含有乙個要找的點

2、1 可能是第乙個點

2、2可能是第二個點

我們就按照上述的思路模擬就行了。

ac code:

#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;

#define read(x) scanf("%d",&x)

#define read(x,y) scanf("%d%d",&x,&y)

#define sread(x,y,z) scanf("%d%d%d",&x,&y,&z)

#define gc(x) scanf(" %c",&x);

#define mmt(x,y) memset(x,y,sizeof x)

#define fast ios::sync_with_stdio(false);cin.tie(0);

#define inf 0x3f3f3f3f

#define ll long long

#define mod 998244353

#define pdd pairll maxn = (1ll<<32) - 1ll;

const int n = 3e5+5;

const int m = 4e6+5;

int x[n],y[n];

int val[n];

int main()

if(sum == 0) return puts("yes"),0;//滿足第一種情況

int max = 0;

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

if(max >= s1 ) return puts("yes"),0;//出現最多的點大於s1,故滿足條件,否則在下面模擬第二個點

max = 0;

mmt(val,0);

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

if(max >= s2) return puts("yes"),0;

else puts("no");

}

D Equal Cut 思維 列舉

題意 將長為n的序列分成連續的4個非空區間,求出每個區間的和,使得max 區間和 min 區間和 最小 思路 割3刀,很自然想到列舉第二刀i,正常做法o n 3 注定要涼。我們將區間 1,i 1 劃分成2個非空區間l1,l2,為了劃分後,使得有 最大值盡可能小,最小值盡可能大,則有l1和l2的差距越...

貪心 思維 列舉

題目大意 左括號和右括號數量相等的個數 思路 從開始列舉,用兩個標記指標,乙個記錄左括號和右括號的數量,出現乙個左括號 出現乙個右括號 出現乙個?號的話我們先把它當成右括號 所以 左括號 但是問號也要記錄下來 所以問號 當 左括號的數量為零的時候說明左括號和右括號的數量相等,所以答案加1,但是如果左...

Maximum Value (二分 思維列舉)

you are given a sequence a consisting of n integers.find the maximum possible value of i divided by a j where 1 i,j n and a i a j.input the first line...