AtCoder Beginner Contest 177 A ~ E
时间:2022-07-24
本文章向大家介绍AtCoder Beginner Contest 177 A ~ E,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
A - Don’t be late
签到:
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
double d,t,s;
cin>>d>>t>>s;
double ans = d / s;
if(ans <= t) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
return 0;
}
B 签到
思路:由于数据范围比较小,所以暴力即可。数据大的话我们可以考虑KMP算法
#include<iostream>
#include<algorithm>
#define inf 0x3f3f3f3f
using namespace std;
int main(){
string s,t;
cin>>s>>t;
int lens = s.length();
int lent = t.length();
int ans = inf;
for(int i=0;i+lent <= lens ;i++){
int res = 0;
for(int j=0;j<lent;j++){
if(s[i+j]!=t[j]){
res++;
}
}
ans = min(ans,res);
}
cout<<ans<<"n";
return 0;
}
C 思路:数据范围比较大,O(n^n)的复杂度肯定不可以,那么我们要分析式子 假设有一组数据:
4 1 3 4 5
那么原式 =1×3+1×4+1×5+3×4+3×5+4×5=1×3+1×4+1×5+3×4+3×5+4×5
=1×3+1×4+3×4+1×5+3×5+4×5=1×3+1×4+3×4+1×5+3×5+4×5
=1×3+(1+3)×4+(1+3+4)×5=1×3+(1+3)×4+(1+3+4)×5
所以我们可以得到可以对数组从小到大进行排序,然后每次用前i-1的前缀和乘以当前这个数就行了
#include<iostream>
#include<algorithm>
#define maxn 200005
using namespace std;
typedef long long ll;
ll n,a[maxn],s[maxn];
ll ans,res;
int main(){
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
sort(a+1,a+1+n);
ans = 0;
s[1] = a[1];
for(int i=2;i<=n;i++){
s[i] = s[i-1] + a[i];
s[i] %= 1000000007;
}
for(int i=2;i<=n;i++){
ans = (ans+a[i] * s[i-1])%1000000007;
}
cout<<ans<<endl;
return 0;
}
D
思路:题意很直观,就是让我们求最大分组数。条件是组内所有人不是朋友关系。
思路:并查集板子题。我们可以对数据预处理后然后对其进行分块,然后其中哪块元素最多的那个个数就是最大组数。
#include<iostream>
#include<algorithm>
#define inf 0x3f3f3f3f
using namespace std;
int f[200005];
int fa[200005];
int find(int x){
return x != f[x]?f[x]=find(f[x]):x;
}
void join(int x,int y){
int fx = find(x);
int fy = find(y);
if(fx != fy) f[fx] = fy;
}
int main(){
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++) f[i] = i;
for(int i=1;i<=m;i++){
int aa,bb;
cin>>aa>>bb;
join(aa,bb);
}
for(int i=1;i<=n;i++) fa[i] = find(f[i]);
int ans = -inf;
sort(fa+1,fa+1+n);
int num = 1;
for(int i=2;i<=n;i++){
if(fa[i] == fa[i-1]) ++num;
else ans = max(ans,num),num=1;
}
cout<<max(ans,num)<<endl;
return 0;
}
E 思路:判断两两互质:分解质因子,如果一个因子同时含有多个数,那么这个序列不是互质的。 判断所有数互质:取第一个数,然后在取其余剩余数的最大值,两者gcd为一则说明所有数互质。
#include <cstdio>
int n,a,d,t[1000003],maxa=-(1<<30);
//maxa保存a的最大值,也是因子的最大值,t[i]表示因子i有多少个,d为n个数的最大公因数
int gcd(int x,int y){
if(!y) return x;
return gcd(y,x%y);
}
void fj(int x){//分解质因数
for(int i=2;i*i<=x;){
if(!(x%i)){
++t[i];//用桶记下来
while(!(x%i)) x/=i;
}
else ++i;
}
if(x>1) ++t[x];//不要忘了这一句
}
int main(){
scanf("%d%d",&n,&a);
d=a;//d初始值为a
for(int i=2;i<=n;i++){
scanf("%d",&a);
if(maxa<a) maxa=a;//更新maxa
d=gcd(d,a);//求n个数的公因数可以这么做
fj(a);//对a分解质因数
}
if(d==1){
for(int i=2;i<=maxa;i++)
if(t[i]>1) return puts("setwise coprime"),0;
//t[i]>1说明有几个数有相同的因子,则肯定有一对数不互质
return puts("pairwise coprime"),0;
}
else return puts("not coprime"),0;
return 0;
}
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- kail 安装及卸载 docker【亲测可用】
- mac 登录远程服务器(常规ssh+免密快捷方式)
- git常用操作--分支同步master 本地库提交到远程分支
- mac苹果 配置maven settings文件【注意,与win环境不一样!!!】
- mac小程序开发 本地调试 安装 npm modules
- Deeplearning.ai 课程笔记第一部分:神经网络与深度学习
- 如何从Node.js开始-Visual Studio2017
- Rust竟然没有异常处理?
- MAC系统 JDK 卸载及彻底删除
- 轻松学Pytorch –Mask-RCNN图像实例分割
- docker安装awvs13
- 远程连接kail Permission denied或者refused【已解决】
- 设计模式~原始模型模式(二)
- 面向对象的7种设计原则(6)-迪米特原则
- LeetCode 刷题记录 1-5