AtCoder Beginner Contest 162(A~D)
程序员文章站
2022-03-25 16:24:43
A Lucky 7 题意:一个三位数,判但是否出现数字7. 题解:签到题。 代码: #include #include #include #include using namespace std; int main(){ ......
题意:一个三位数,判但是否出现数字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; }
题意:给定数字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; }
转载自:
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; }
题意:这题的题意是给你一串由‘r’,'g','b'组成的字符串。从中取三个坐标(i,j,k)(1<=i<j<k<=n),要求你能找到对少对这样的坐标符合一下两个条件:
sj≠si,sk≠si,sj≠sk 。
j-i≠k-j。
题解:这一题的数据范围比较大,暴力肯定会超时。因此肯定是有比较快的方法。
从正面算可能会超时,我们就从反面算,在这里,我们将符合条件(一)的总数都求出来,然后减去不合符条件(二)且符合条件(一)的数量即可。
参考博客:
代码:
#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; }
上一篇: SQL注入攻击
推荐阅读
-
AtCoder Beginner Contest 173(E 思维模拟 F 容斥 思维题 )
-
AtCoder Beginner Contest 163 D - Sum of Large Numbers(递推&找规律)
-
AtCoder Beginner Contest 182----C. To 3
-
AtCoder Beginner Contest 182----E. Akari
-
AtCoder Beginner Contest 182 题解
-
AtCoder Beginner Contest 182----D. Wandering
-
【Atcoder】Atcoder Beginner Contest 143
-
AtCoder Beginner Contest 176 D-Wizard in Maze(双端队列)
-
AtCoder Beginner Contest 176
-
AtCoder Beginner Contest 176总结