UVA 10125 中途相遇法

2022-09-17 22:03:19 字數 1243 閱讀 1340

題意:

給定乙個整數集合,找出最大的d,使得a+b+c=d,a,b,c,d是集合中不同的元素;

思路:如果單純的列舉a,b,c的複雜度是o(n^3)的,為了降低複雜度,可以先把a+b的情形都找出來,然後再列舉d和c,是否符合要求;

ac**:

#include #include 

#include

#include

#include

#include

using

namespace

std;

#define for(i,j,n) for(int i=j;i<=n;i++)

#define mst(ss,b) memset(ss,b,sizeof(ss));typedef

long

long

ll;template

void read(t&num)

int stk[70

], tp;

template

inline void

print(t p)

while(p) stk[++ tp] = p%10, p/=10

;

while(tp) putchar(stk[tp--] + '0'

); putchar('\n

');}const ll mod=1e9+7

;const

double pi=acos(-1.0

);const

int inf=1e9;

const

int n=3e6+10

;const

int maxn=1e3+10

;const

double eps=1e-10

;int

a[maxn],n,ans;

struct

node

;vector

ve[1000*maxn];

mapmp;

int check(int x,int

y) }

return -inf;

}int

main()

else

}ans=-inf;

for(i,

1,n)

}if(ans==-inf)cout<<"

no solution

"

return0;

}

HDU 5936 中途相遇法

題目位址 這道題關鍵在於f y,k y可以拆成f a,k f b,k a1e5 b 我們就把y的1e9範圍降到了1e5 然後我們可以對前一半1e5個數枚舉出x f a,k a1e5 然後對於後一半1e5個數用二分找到有多少和f b,k b相同的就是個數。注意當x等於零的時候會有a 0,b 0的情況,...

LA 2965 中途相遇法

題意 有很多字串 24 選出一些字串,要求這些字串的字母都是偶數次 分析 暴力2 24也很大了,中途相遇法 其原理就是一分為二,兩組解組成問題的解 考慮到,每個字串出現的次數沒什麼關係,只要關於他的奇偶,那麼就有二進位制,1出現奇數次,0偶數次 每乙個字串對應於乙個a位向量,在前半個表中,選擇一些字...

hdu4963 中途相遇

將序列分成兩半,各n各字元。對於前一半,列舉每個字元屬於t1還是t2,共2 n種情況。在乙個方案中,t1的子串行為a,t2的子串行為b,我們假定a的長度不大於b的長度。顯然,a是b的字首才符合要求。令c b a,即b去掉a字首後剩餘的部分。同理,處理後一半得到乙個c 就是去掉相同字尾後剩餘的部分。當...