codeforces round #613
A. Mezo Playing
题目大意
机器人初始位置为0,给了一串指令告诉机器人是往左走一格还是右走一格,部分指令可能会丢失,问机器人最终可能的位置的情况数。
解题思路
见代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
char s[100010];
scanf("%s",s);
int n1=0;
int n2=0;
for(int i=0;i<strlen(s);i++){
if(s[i]=='L'){
n1++;
}
else n2++;
}
cout<<n1+n2+1<<endl;
return 0;
}
B. Just Eat It! (CF 1285 B)
题目大意
给定一个数列,问整个区间和以及部分区间和哪个大。
解题思路
求最大子序列和即可,注意不能取整个区间,直接从左到右,从右到左求俩次最大子序列和即可
AC代码:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll a[100010];
ll dp[100010];
int main(){
ll t,n,sum;
cin>>t;
while(t--){
sum=0;
cin>>n;
memset(a,0,sizeof(a));
memset(dp,0,sizeof(dp));
for(int i=1;i<=n;i++){ cin>>a[i]; sum+=a[i];}
dp[1]=a[1];
for(int i=2;i<n;i++){
dp[i]=max(dp[i-1]+a[i],a[i]);
}
ll maxn=dp[1];
for(int i=1;i<n;i++){
maxn=max(dp[i],maxn);
}
dp[2]=a[2];
for(int i=3;i<=n;i++){
dp[i]=(max(dp[i-1]+a[i],a[i]));
}
ll max2=dp[2];
for(int i=3;i<=n;i++){
max2=max(max2,dp[i]);
}
ll pos=max(max2,maxn);
//cout<<sum<<" "<<maxn<<" "<<max2<<" "<<pos<<endl;
if(pos>=sum){
cout<<"NO"<<endl;
}
else cout<<"YES"<<endl;
}
}
C. Fadi and LCM (CF 1285 C)
题目大意
给数x,找出 且 最小即可
解题思路
贴一下大佬的,参考自lanly大佬
AC代码:
#include<iostream>
#include<cstdio>
using namespace std;
typedef long long LL;
LL X, A, B;
LL gcd(LL a, LL b){
if(b != 0) return gcd(b, a % b);
else return a;
}
int main()
{
A = B = 1000000000007;
int a = 10, b = 5;
scanf("%I64d", &X);
for(LL a = 1; a * a <= X; a++){
if(X % a == 0){
LL b = X / a;
if(gcd(a, b) == 1){
LL c = a > b ? a : b;
LL ans = A > B ? A : B;
if(c < ans){
A = a; B = b;
}
}
}
}
printf("%I64d %I64d\n", A, B);
return 0;
}