Codeforces Round #613 (Div. 2)
A. Mezo Playing Zoma
一个机器人,给一行只包含“R”“L”的指令,代表向左或者向右走。每个操作执行或者不执行,机器人在数轴上起始位置为0,求经过一些列操作后可能在的区间长度。
水题
#include <iostream> #include <cstring> using namespace std; int a,b; int main() { int n; scanf("%d",&n); char c; for(int i=1;i<=n;i++) { cin>>c; if(c=='L') a++; else b++; } printf("%d\n",a+b+1); }
B. Just Eat It!
给定一组数组,求出所有元素的和sum,若sum大于一段子区间的和输出yes,否则输出no。
分析:由于要求一段子区间的最大和,我们可以求出区间【1-n-1】和区间【2-n】的最大区间和再与sum比较
#include<cstdio> #include<algorithm> #include<cstring> typedef long long ll; using namespace std; const int mx=1e5+10; int a[mx]; int t,n,m; ll sum; int main() { scanf("%d",&t); while(t--) { bool flag=true; sum=0; scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); sum+=a[i]; } ll cnt=0,maxx=-1; for(int i=1;i<=n-1;i++) { cnt+=a[i]; if(cnt<a[i])cnt=a[i]; maxx=max(maxx,cnt); } cnt=0; for(int i=2;i<=n;i++) { cnt+=a[i]; if(cnt<a[i])cnt=a[i]; maxx=max(maxx,cnt); } if(maxx>=sum) printf("NO\n"); else printf("YES\n"); } return 0; }
C. Fadi and LCM
题意:给一个整数N 求一对数(a,b),使x为(a,b)的最小公倍数,且max(a,b)最小
分析:枚举所有N的 因子,每次得到因子 x与N/x 若需使x为一对因子的最小公倍数,则需要满足 gcd(x,N/x)==1;
#include<iostream> #include<algorithm> #include<cstdio> #include<cstring> using namespace std; typedef long long ll; ll x,z,b; ll gcd(ll a,ll b) { return a%b==0?b:gcd(b,a%b); } int main() { ll mn=1e13; scanf("%lld",&x); mn=min(x,mn); for(ll i=2;i<=sqrt(x);i++) { if(x%i==0&&gcd(x/i,i)==1) mn=min(mn,x/i); } printf("%lld %lld\n",x/mn,mn); return 0; }