2023牛客寒假算法基础集训营3 -- E-勉强拼凑的记忆(贪心 + 二分)
创始人
2024-05-14 21:27:33

题目如下:

在这里插入图片描述

题解 or 思路:

我们可以发现:除了 n==2n == 2n==2 无解, 其他情况答案至少为 n+12\frac{n+ 1}{2}2n+1​
答案在 n+12\frac{n + 1}{2}2n+1​ 到 nnn 之间
我们可以假设 答案为 ansansans
最优摆放为:
在这里插入图片描述

所以可以二分去求解
求最大 ansansans 满足 :ans∗3−n+12∗2≤nans * 3 - \frac{n + 1}{2} * 2 \le nans∗3−2n+1​∗2≤n

AC 代码如下:

/*
Make it simple and keep self stupid
author:Joanh_Lan
*/
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#define buff                     \ios::sync_with_stdio(false); \cin.tie(0);
// #define int long long
#define ll long long
#define PII pair
#define px first
#define py second
typedef std::mt19937 Random_mt19937;
Random_mt19937 rnd(time(0));
using namespace std;
const int mod = 1e9 + 7;
const int inf = 2147483647;
const int N = 100009;
// int Mod(int a,int mod){return (a%mod+mod)%mod;}
// int lowbit(int x){return x&-x;}//最低位1及其后面的0构成的数值
// int qmi(int a, int k, int p){int res = 1 % p;while (k){if (k & 1) res = Mod(res * a , p);a = Mod(a * a , p);k >>= 1;}return res;}
// int inv(int a,int mod){return qmi(a,mod-2,mod);}
// int lcm(int a,int b){return a*b/__gcd(a,b);}
void solve()
{ll n;cin >> n;if (n == 2){cout << "-1\n";return;}ll l = (n + 1) / 2, r = n;while (l < r){ll mid = l + r + 1ll >> 1;if (mid * 3 - (n + 1) / 2 * 2<= n)l = mid;elser = mid - 1;}cout << l << '\n';
}
int main()
{buff;int _;cin >> _;while (_--)solve();
}

相关内容

热门资讯

阿西吧是什么意思 阿西吧相当于... 即使你没有受到过任何外语培训,你也懂四国语言。汉语:你好英语:Shit韩语:阿西吧(아,씨발! )日...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...