AtCoder Beginner Contest 162(A~D)

A Lucky 7html

題意:一個三位數,判可是否出現數字7.ios

題解:簽到題。c++

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;;
int main(){
    string ptr;
    cin>>ptr;
    if(ptr.find("7")!=-1){
        cout<<"Yes";
    }else{
        cout<<"No";
    }
    return 0;
}

B FizzBuzz Sumapp

題意:給定數字N,排除能被3或5整除的,將其他點的數字相加便可。spa

題解:簽到題。code

法一:htm

#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;
} 

法二blog

#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;
}

轉載自:http://www.javashuo.com/article/p-uvedqwyb-bu.htmlip

C - Sum of gcd of Tuples (Easy)ci

題意:題目給出數據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。

題解:這一題的數據範圍比較大,暴力確定會超時。所以確定是有比較快的方法。

   從正面算可能會超時,咱們就從反面算,在這裏,咱們將符合條件(一)的總數都求出來,而後減去不合符條件(二)且符合條件(一)的數量便可。

   參考博客:http://www.javashuo.com/article/p-nbibcmoq-bp.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;
}
相關文章
相關標籤/搜索