Forethought Future Cup - Elimination Round
Posted gloid
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Forethought Future Cup - Elimination Round相关的知识,希望对你有一定的参考价值。
A:签到。
#include<bits/stdc++.h> using namespace std; #define ll long long char getc(){char c=getchar();while ((c<‘A‘||c>‘Z‘)&&(c<‘a‘||c>‘z‘)&&(c<‘0‘||c>‘9‘)) c=getchar();return c;} int gcd(int n,int m){return m==0?n:gcd(m,n%m);} int read() { int x=0,f=1;char c=getchar(); while (c<‘0‘||c>‘9‘) {if (c==‘-‘) f=-1;c=getchar();} while (c>=‘0‘&&c<=‘9‘) x=(x<<1)+(x<<3)+(c^48),c=getchar(); return x*f; } int n;char s[100]; signed main() { #ifndef ONLINE_JUDGE freopen("a.in","r",stdin); freopen("a.out","w",stdout); #endif scanf("%s",s+1);n=strlen(s+1);int cnt=0; for (int i=1;i<=n;i++) if (s[i]==‘a‘) cnt++; for (int i=n;i>=1;i--) if (cnt>i/2) {cout<<i;break;} return 0; //NOTICE LONG LONG!!!!! }
B:显然可能的划分位置只有一个,找到后检验即可。
#include<bits/stdc++.h> using namespace std; #define ll long long #define N 100010 char getc(){char c=getchar();while ((c<‘A‘||c>‘Z‘)&&(c<‘a‘||c>‘z‘)&&(c<‘0‘||c>‘9‘)) c=getchar();return c;} int gcd(int n,int m){return m==0?n:gcd(m,n%m);} int read() { int x=0,f=1;char c=getchar(); while (c<‘0‘||c>‘9‘) {if (c==‘-‘) f=-1;c=getchar();} while (c>=‘0‘&&c<=‘9‘) x=(x<<1)+(x<<3)+(c^48),c=getchar(); return x*f; } int n;char s[N],a[N],b[N]; signed main() { scanf("%s",s+1);n=strlen(s+1);int cnt=0; int cnt2=0;for (int i=1;i<=n;i++) if (s[i]==‘a‘) cnt2++; for (int i=1;i<=n;i++) { if (s[i]==‘a‘) cnt++; if (cnt==cnt2&&i-cnt==n-i) { int t=0; for (int j=1;j<=i;j++) if (s[j]!=‘a‘) a[++t]=s[j]; t=0; for (int j=i+1;j<=n;j++) b[++t]=s[j]; for (int j=1;j<=t;j++) if (a[j]!=b[j]) {cout<<":(";return 0;} for (int j=1;j<=i;j++) putchar(s[j]);return 0; } } cout<<":("; return 0; //NOTICE LONG LONG!!!!! }
C:二进制分组。
#include<bits/stdc++.h> using namespace std; #define ll long long #define N 100010 char getc(){char c=getchar();while ((c<‘A‘||c>‘Z‘)&&(c<‘a‘||c>‘z‘)&&(c<‘0‘||c>‘9‘)) c=getchar();return c;} int gcd(int n,int m){return m==0?n:gcd(m,n%m);} int read() { int x=0,f=1;char c=getchar(); while (c<‘0‘||c>‘9‘) {if (c==‘-‘) f=-1;c=getchar();} while (c>=‘0‘&&c<=‘9‘) x=(x<<1)+(x<<3)+(c^48),c=getchar(); return x*f; } int T,n,a[110],b[110]; signed main() { T=read(); while (T--) { n=read(); int ans=0; for (int i=7;i>=0;i--) { int u=0,v=0; for (int j=1;j<=n;j++) if (j&(1<<i)) a[++u]=j; else b[++v]=j; if (u&&v) { cout<<u<<‘ ‘<<v<<‘ ‘; for (int j=1;j<=u;j++) cout<<a[j]<<‘ ‘; for (int j=1;j<=v;j++) cout<<b[j]<<‘ ‘; cout<<endl; ans=max(ans,read()); } } cout<<-1<<‘ ‘<<ans<<endl; } return 0; //NOTICE LONG LONG!!!!! }
D:不考虑范围限制的话显然能到达所有gcd(a,b)的倍数。注意到对于不小于a+b的gcd(a,b)的倍数,该点一定可以为到达该点时所经过的最大值。那么对于<a+b的数暴力跑dij,>=a+b的数等差数列求和即可。然后因为inf设小调了一年。
#include<bits/stdc++.h> using namespace std; #define ll long long #define M 1000000 char getc(){char c=getchar();while ((c<‘A‘||c>‘Z‘)&&(c<‘a‘||c>‘z‘)&&(c<‘0‘||c>‘9‘)) c=getchar();return c;} int gcd(int n,int m){return m==0?n:gcd(m,n%m);} int read() { int x=0,f=1;char c=getchar(); while (c<‘0‘||c>‘9‘) {if (c==‘-‘) f=-1;c=getchar();} while (c>=‘0‘&&c<=‘9‘) x=(x<<1)+(x<<3)+(c^48),c=getchar(); return x*f; } int n,a,b,d[1000010]; bool flag[1000010]; struct data { int x,d; bool operator <(const data&a) const { return d>a.d; } }; priority_queue<data> q; void dij() { for (int i=1;i<=M;i++) d[i]=1000000000;d[0]=0; q.push((data){0,0}); for (;;) { while (!q.empty()&&flag[q.top().x]) q.pop(); if (q.empty()) break; data x=q.top();q.pop(); flag[x.x]=1; if (x.x>=b&&d[x.x-b]>x.d) { d[x.x-b]=x.d; q.push((data){x.x-b,d[x.x-b]}); } if (x.x+a<=M&&d[x.x+a]>max(x.x+a,x.d)) { d[x.x+a]=max(x.x+a,x.d); q.push((data){x.x+a,d[x.x+a]}); } } } signed main() { n=read(),a=read(),b=read(); dij(); ll ans=0; for (int i=0;i<=min(n,M);i++) ans+=max(0,n-d[i]+1); int u=gcd(a,b),cnt=n/u-M/u; if (cnt>0) { ans+=1ll*cnt*(n+1); int l,r; for (l=M+1;l<=n;l++) if (l%u==0) break; for (r=n;r>M;r--) if (r%u==0) break; ans-=1ll*(l+r)*cnt/2; } //??i (i=1000001~n,i%u==0) cout<<ans; return 0; //NOTICE LONG LONG!!!!! }
EFGH:占坑待填。
以上是关于Forethought Future Cup - Elimination Round的主要内容,如果未能解决你的问题,请参考以下文章
2015-2016 XVI Open Cup, Grand Prix of Bashkortostan, SKB Kontur Cup Stage 2