codeforces Educational Codeforces Round 53 (Rated for Div. 2) 題解
阿新 • • 發佈:2018-12-24
A. Diverse Substring
題目:
程式碼如下:
#include <cstdio> #include <cstring> #include <algorithm> #include <iostream> using namespace std; const int maxn=1e3+5; int num[30]; char s[maxn]; int n; int main() { scanf("%d",&n); scanf("%s",s); int flag=0; for (int i=0;i<n-1;i++) { if(s[i]!=s[i+1]) { flag=1; printf("YES\n"); printf("%c%c",s[i],s[i+1]); break; } } if(!flag) { printf("NO\n"); } return 0; }
B. Vasya and Books
題目:
程式碼如下:
#include <cstdio> #include <cstring> #include <algorithm> #include <iostream> #include <stack> #include <queue> using namespace std; const int maxn=2*1e5+5; queue<int>s; int vis[maxn]; int b[maxn]; int main() { int n; memset (vis,0,sizeof(vis)); scanf("%d",&n); for (int i=0;i<n;i++) { int x; scanf("%d",&x); s.push(x); } for (int i=0;i<n;i++) { scanf("%d",&b[i]); } for (int i=0;i<n;i++) { int num=0; if(vis[b[i]]) { printf("%d%c",num,i==n-1?'\n':' '); } else { while (!s.empty()) { num++; int t=s.front(); s.pop(); vis[t]=1; if(t==b[i]) { printf("%d%c",num,i==n-1?'\n':' '); break; } } } } return 0; }
C. Vasya and Robot
題目:
程式碼如下:
#include <cstdio> #include <cstring> #include <algorithm> #include <iostream> #include <math.h> using namespace std; const int maxn=2*1e5+5; int n; int x,y; int locx[maxn],locy[maxn]; int check (int len) { int ex=locx[n],ey=locy[n]; for (int i=0;i+len<=n;i++) { int l=i,r=i+len; int movex=locx[r]-locx[l]; int movey=locy[r]-locy[l]; int nowx=ex-movex; int nowy=ey-movey; int dis=abs(nowx-x)+abs(nowy-y); if(dis<=len&&dis%2==len%2) return 1; } return 0; } void erfen () { int l=0,r=n; int ans,flag=0; while (l<=r) { int mid=(l+r)>>1; if(check(mid)) { flag=1; ans=mid; r=mid-1; } else { l=mid+1; } } if(flag) { printf("%d\n",ans); } else { printf("-1\n"); } } int main() { scanf("%d",&n); getchar(); locx[0]=0; locy[0]=0; for (int i=1;i<=n;i++) { char c; scanf("%c",&c); if(c=='U') { locx[i]=locx[i-1]; locy[i]=locy[i-1]+1; } else if(c=='D') { locx[i]=locx[i-1]; locy[i]=locy[i-1]-1; } else if(c=='L') { locx[i]=locx[i-1]-1; locy[i]=locy[i-1]; } else { locx[i]=locx[i-1]+1; locy[i]=locy[i-1]; } } scanf("%d%d",&x,&y); erfen(); return 0; }
D. Berland Fair
題目:
程式碼如下:
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
const int maxn=2*1e5+5;
typedef long long ll;
int n;
ll T;
ll a[maxn];
ll sum=0;
ll ans=0;
int start=0;
int main()
{
scanf("%d%lld",&n,&T);
for (int i=0;i<n;i++)
{
scanf("%lld",&a[i]);
}
while (1)
{
ll sum=0;
int flag=0;
int num=0;
for (int i=0;i<n;i++)
{
if(a[i]+sum<=T)
{
flag=1;
num++;
sum+=a[i];
}
}
if(!flag)
{
break;
}
ans+=T/sum*num;
T=T%sum;
}
printf("%lld\n",ans);
return 0;
}