AtCoder Beginner Contest 162(A~D)

2020-04-15 16:00:31来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

AtCoder Beginner Contest 162(A~D)

A Lucky 7

题意:一个三位数,判但是否出现数字7.

题解:签到题。

代码:

#include<iostream>
#include<algorithm>
#include<cstring>
#include<stdio.h>
using namespace std;
int main(){
    int N;
    cin>>N;
    while(N){
        if(N%10==7){
            cout<<"Yes"<<endl;
            return 0; 
        }
        N=N/10;
    }
    cout<<"No"<<endl;
    return 0;
} 

 B FizzBuzz Sum

题意:给定数字N,排除能被3或5整除的,将其余点的数字相加即可。

题解:签到题。

法一:

#include<iostream>
#include<algorithm>
#include<cstring>
#include<stdio.h>
using namespace std;
#define ll long long
ll num[10000005]={0};
void app(){
    for(ll i=1;i<=10000005;i++){
        if(num[i]==0){//没有判断 
            if(i%3==0||i%5==0){//判断出一个不合格 
                for(ll j=i;j<=10000005;j=j+i){
                    num[i]=-1;//不能处理 
                }
            }else{
                num[i]=i;
            }
        }
    }
}
int main(){
    ll N;
    ll sum=0;
    app();
    cin>>N;
    for(int i=1;i<=N;i++){
        if(num[i]!=-1){
            sum=sum+num[i];
        }
    }
    cout<<sum<<endl;
    return 0;
} 

法二

#include <bits/stdc++.h>
#define ll long long
using namespace std;
int main() {
    int n;
    scanf("%d",&n);
    ll ans=0;
    for(int i=1;i<=n;i++) {
        if(i%3==0||i%5==0) continue;
        ans+=i;
    }
    printf("%lld\n",ans);
    return 0;
}

转载自:https://www.cnblogs.com/zdragon1104/p/12688051.html

C - Sum of gcd of Tuples (Easy)

题意:题目给出数据N,求Σka=1Σkb=1Σkc=1 gcd(a,b,c)的和。

题解:数据范围比较小,可暴力,前提是要知道三个数的最大公约数的求法。

代码:

#include<iostream>
#include<algorithm>
#include<cstring>
#include<stdio.h>
using namespace std;
int main(){
    int k;
    cin>>k;
    int sum=0;
    for(int i=1;i<=k;i++){
        for(int j=1;j<=k;j++){
            for(int r=1;r<=k;r++){
                int a=__gcd(i,j);
                sum=sum+__gcd(a,r);
            }
        }
    }
    cout<<sum<<endl;
    return 0;
} 

 D - RGB Triplets

题意:这题的题意是给你一串由‘R’,'G','B'组成的字符串。从中取三个坐标(i,j,k)(1<=i<j<k<=N),要求你能找到对少对这样的坐标符合一下两个条件:

  Sj≠Si,Sk≠Si,Sj≠Sk

  j-i≠k-j。

题解:这一题的数据范围比较大,暴力肯定会超时。因此肯定是有比较快的方法。

   从正面算可能会超时,我们就从反面算,在这里,我们将符合条件(一)的总数都求出来,然后减去不合符条件(二)且符合条件(一)的数量即可。

   参考博客:https://www.cnblogs.com/lr599909928/p/12688958.html

 代码:

#include<iostream>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
int main() {
    int n;
    string s;
    cin>>n;
    cin>>s;
    ll r=0,g=0,b=0;
    for(int i=0; i<s.length(); i++) {
        if(s[i]=='R') {
            r++;
        }
        if(s[i]=='G') {
            g++;
        }
        if(s[i]=='B') {
            b++;
        }
    }
    ll ans=r*g*b;
    ll an=0;
    for(int i=0; i<s.length(); i++) {  //这里遍历的是  它们之间的间距相同的字符 
        for(int j=i+1; j<n; j++) {
            int k=j+(j-i);
            if(k>n-1) {
                continue;
            }
            if(s[i]!=s[j]&&s[j]!=s[k]&&s[i]!=s[k]) {/*有  因为它们之中包含了  “每两种之间互不相同” 这一条件 ,而符合这一条件的
            已经在上面求出总数了,这里是因为它们不符合条件(一) ,故在这里最后我们要把他们减去*/ 
                an++;
            }
        }
    }
    printf("%lld\n",ans-an);
    return 0;
}

 

 

 

 

  

 


原文链接:https://www.cnblogs.com/blogxsc/p/12694565.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:c/c++ 使用valgrind检查内存泄漏

下一篇:用C++实现:完美的代价