AtCoder Beginner Contest 174
A - Air Conditioner
题解
签到题
代码
#include <iostream>
#include <cstdio>
using namespace std;
int main() {
int x;
scanf("%d", &x);
if(x >= 30)
printf("Yes\n");
else
printf("No\n");
return 0;
}
B - Distance
题意
给你N个点,求所有距离大于D的点的个数
题解
平方
代码
#include <iostream>
#include <cstdio>
using namespace std;
double D;
int main() {
int N;
double x, y;
int sum = 0;
scanf("%d%lf", &N, &D);
for(int i = 1; i <= N; i++) {
scanf("%lf%lf", &x, &y);
//cout << x*x + y*y << endl;
if((x*x + y*y) <= D*D)
sum++;
}
printf("%d\n", sum);
return 0;
}
C - Repsept
题意
给你一个k,问你7,77,777,7777…中是否有一个数是k的倍数,如果有,输出这个数的位数,否则输出-1。
代码
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
int gcd(int a,int b)
{
if(b==0)
return a;
else
return gcd(b,a%b);
}
int main() {
int K;
scanf("%d", &K);
if(K % 7 == 0)
K /= 7;
if(gcd(10,K) != 1) {
printf("-1\n");
return 0;
}
int v = 1%K;
int ans = 1;
while(v != 0) {
v = (10*v + 1)%K;
ans++;
}
printf("%d", ans);
}
D.Alter Altar
题意:
有W和R两种色块,给你他们的排序,但W不能在R的左边,你有两种操作方式,
一,改变两个色块的位置
二,改变颜色
问你最少有多少个操作数
神仙题解(标答)
统计所有 [R] 的数量 numnum,这些 RR 都可以通过一操作移到最左边,那么只要查询 [0,num] 的范围里有多少个[W] 需要交换即可
代码
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int main() {
int a;
string s;
cin >> a >> s;
cout<<count(s.begin(),s.begin()+count(s.begin(),s.end(),'R'),'W');
return 0;
}
E.Logs
题意
给你N个木头,你可以切K下,求输出切割后最长木段的最小值.
题解
二分长度
代码
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
const int MAXN = 2e5+5;
int a[MAXN];
int n ,k;
bool Find(int x) {
int cnt = 0;
for(int i = 1; i <= n; i++) {
cnt += (a[i]-1)/x;
}
return cnt <= k;
}
int main() {
int l = 1, r = 0;
scanf("%d%d", &n, &k);
for(int i = 1; i <= n; i++) {
scanf("%d", &a[i]);
r = max(r,a[i]);
}
while(l <= r) {
int mid = (l+r)/2;
if(Find(mid))
**加粗样式** r = mid - 1;
else
l = mid + 1;
}
printf("%d\n", l);
return 0;
}
注:切割次数=段数-1
F Range Set Query
离线化加树状数组:
可以去看看大佬的代码
F Range Set Query
Over!