救救蒟蒻
查看原帖
救救蒟蒻
226413
scjyn_AMD_ROG楼主2020/9/15 20:08
#include<bits/stdc++.h>
using namespace std;
const int N = 2e6 + 5e5 + 10;
int T , A , B;
int a[N],b[N];
bool vis[N << 1],vis1[N << 1];
int main(){
	//freopen("fruit.in","r",stdin);
	//freopen("fruit.out","w",stdout);
	ios::sync_with_stdio(false);
	cin.tie(0),cout.tie(0);
	cin >> T >> A >> B;
	if(T % A == 0 || T % B == 0)
	{
		cout << T;return 0;
	}
	int C = A / 2;int D = B / 2;
	int L = T / A;int R = T / B;
	if(A % B == 0)
	{
		int ans = T % B;
		if(ans > D)
		cout << T - ans + D;
		return 0;
	}
	if(B % A == 0)
	{
		int ans = T % A;
		if(ans > C)
		cout << T - ans + C;
		return 0;
	}
	for(int i = 0;i <= L + 1;i++)
	{
		a[i << 1] = A * i;
		if(a[i << 1] <= T)
		vis[a[i << 1]] = 1;   
	}
	for(int i = 1;i <= (L + 1) << 1;i += 2)
	{
		a[i] = (i >> 1) * A + C;
		if(a[i] <= T)
		vis1[a[i]] = 1;
	}
	for(int i = 0;i <= R + 1;i++)
	{
		b[i << 1] = B * i;
		if(b[i << 1] <= T)
		vis1[b[i << 1]] = 1;  
	}
	for(int i = 1;i <= (R + 1) << 1;i += 2)
	{
		b[i] = (i >> 1) * B + D;
		if(b[i] <= T)
		vis[b[i]] = 1;
	}
	for(int j = T;;j--)
	{
	    int now = j;
	    while(!vis[now])
	    {
	    	now --;
     	}	
	    for(int i = now;i >= 0;i--)
	    {
	        if(vis[i])
	    	{
		    	if(vis[j - i])
		    	{
			    	cout << j;
			    	return 0;
		    	}
		    	if(vis1[j - i])
		    	{
		     		cout << j;
			    	return 0;
		    	}
	    	}
    	}
	}
}

WA 了 俩 个 点

为啥

不开O2也跑得飞快,几毫秒,结果多跑了几个数。。。

2020/9/15 20:08
加载中...