====== CF round 662 div2 ======
===== A =====
**题意:**略
**思路:**找规律
#include
#include
#include
#include
#include
using namespace std;
int main()
{
int t;
scanf("%d", &t);
while (t--)
{
int n;
cin >> n;
cout << n / 2 + 1 << endl;
}
}
===== B =====
题意:给定一些长度不一的木棒,q个操作,每次操作增加或者删除一根木棒,问操作之后的木棒能否围成一个正方形或者长方形。
题解:直接按照长度分类成四根以上的,两根以上的,暴力维护即可。
#include
#include
#include
#include
#include
#include
===== C =====
题意:给定一些数字,要求对这些数字重新排列,是的两个相同数字之间的最小间隔最大。
题解:看起来像二分答案,但是二分答案显然不太好处理(可以做,但是不好想而且麻烦),考虑直接贪心,找出出现次数最多的数字,使其均匀分布,然后将其他的数字插入空隙即可。
#include
#include
#include
#include
#include
using namespace std;
const int maxn = 1e5 + 5;
int pic[maxn];
int main()
{
int t;
scanf("%d", &t);
while (t--)
{
int n, m = 0, tot = 0;
scanf("%d", &n);
for (int i = 1; i <= n; i++)
pic[i] = 0;
for (int i = 1; i <= n; i++)
{
int x;
scanf("%d", &x);
pic[x]++;
m = max(m, pic[x]);
}
for (int i = 1; i <= n; i++)
if (pic[i] == m)
tot++;
printf("%d\n", (n - m - tot + 1) / (m - 1));
}
return 0;
}
===== D =====
**题意:**给定一个矩阵,每个格子都有一种颜色,问从中能找到多少个有多少个相同颜色的旋转45度的正方形。
**题解:**dp,$dp[i][j]$表示以$(i,j)$为最下面的那个格子一共有多少个斜正方形,所以,只要考虑$(i-2,j),(i-1,j),(i-1,j-1),(i-1,j+1)$这几个格子即可。
#include
#include
#include
#include
#include
#include