A.Air Conditioner
签到题
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int x;
cin >> x;
if (x >= 30)
cout << "Yes" << endl;
else
cout << "No" << endl;
}
B.Distance
注意开大一点的值 即可
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
long long int n, d;
double x, y;
long int num = 0;
cin >> n >> d;
for (long int i = 1; i <= n; i++)
{
cin >> x >> y;
if (x * x + y * y <= d * d)
num++;
}
cout << num << endl;
}
C.Repsept
给你一个 k 从他的倍数中找到一个只含 7 的输出这个倍数的长度。
我们可以维护一个值,即当前这么多7组成的数模n的值。在末尾加上一个7后,变为了10x+7,那么模数也乘10加7。
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
long long int k;
cin >> k;
int ans = 1;
for (int mod = 7; mod % k; mod = (mod * 10 + 7) % k)
{
if (++ans > k)
{
ans = -1;
break;
}
}
cout << ans << endl;
}
D. Alter Altar
n 个石子排成一行,石子分两种,一种为R一种为W,可以进行两种操作:交换任意两个石子、改变一个的类型。问最少几次操作后不存在R石子紧邻的左边为W的情况
最后情况,左边全是R,右边全是W。
于是我们可以算出W的数量为ans,然后得出最后ans位不为W的字符数量,然后每个和前面交换,达到最优情况
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
int main()
{
char s[200005];
long int n;
cin >> n;
long int ans = 0;
for (int i = 0; i <n; i++)
{
cin >> s[i];
if (s[i] == 'W')
ans++;
}
long long cnt = 0;
for (int i = n - ans; i < n; i++)
{
if (s[i] != 'W')
cnt++;
}
cout << cnt << endl;
}
E.Logs
有 n 个木头,每个木头有一个自己的长度,你可以切 k 次,使得切出来的木头中最长的最短,问最短为多长(小数就四舍五入)。
我们可以这么想,分别考虑每个块至少要被劈的次数使得其产生的新块中不含大于mid的块,能否让块的最大值最终不大于mid且劈的次数不多于k次。次数过多则增加mid的值,过少则减少mid的距离,不断更新mid的值使其最大。(用二分法多次逼近)
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
long int n;
long int a[200005];
long int k;
inline int log_number(int log, int mid)
{
if (log % mid == 0)
return log / mid;
else
return log / mid+1;
}
bool check(int len)
{
int ans = 0;
for (int i = 1; i <= n; i++)
{
ans += log_number(a[i], len)-1;
}
if (ans <= k)
return true;
else
return false;
}
int main()
{
cin >> n >> k;
for (int i = 1; i <=n; i++)
{
cin >> a[i];
}
int l = 1, r = 1e9;
while (r - l > 1)
{
int mid = (l + r) / 2;
if (check(mid))
r = mid;
else l = mid;
}
cout << (check(l) ? l : r) << endl;
}
F.Range Set Query
一个长为 n 的序列,每次询问一个区间 [L,R] 中有不同的数有几种
树状数组,洛谷原题,题目