題意:
給定乙個整數集合,找出最大的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 就是去掉相同字尾後剩餘的部分。當...