AtCoder Beginner Contest 174

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!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值