zoukankan      html  css  js  c++  java
  • 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
    ",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
    ",ans-an);
        return 0;
    }

      

  • 相关阅读:
    蛙蛙推荐:五分钟搞定网站前端性能优化
    蛙蛙推荐:AngularJS学习笔记
    蛙蛙推荐:如何实时监控MySql状态
    这6种思维,学会了你就打败了95%文案!zz
    10分钟,解决卖点没创意的难题zz
    总感觉自己工作沟通想问题时没有逻辑,这可怎么办?| 极简逻辑指南
    「零秒思考」是个神话,不过这款笔记术你值得拥有zz
    关于提高沟通能力的书单 | 章鱼书单zz
    日常沟通的 3 种模式zz
    关于提高沟通能力的书单zz
  • 原文地址:https://www.cnblogs.com/blogxsc/p/12694565.html
Copyright © 2011-2022 走看看