Codeforces Round #522 (Div. 2, based on Technocup 2019 Elimination Round 3)
阿新 • • 發佈:2018-11-24
找到k在餐具中的大倍數
#include<bits/stdc++.h> #include<vector> using namespace std; const int maxn=105; int a[maxn]; int main(){ int max=0,n,k,x; memset(a,0,sizeof(a)); scanf("%d%d",&n,&k); for(int i=0;i<n;i++){ scanf("%d",&x); a[x]++; if(a[x]>max) max=a[x]; } int ans=0; if(max%k==0){ for(int i=0;i<maxn;i++) if(a[i]==0) a[i]=max; } else { max=(max/k+1)*k; for(int i=0;i<maxn;i++) if(a[i]==0) a[i]=max; } for(int i=0;i<maxn;i++) ans+=max-a[i]; printf("%d\n",ans); }
#include<bits/stdc++.h> using namespace std; const int maxn=105; char s[maxn]; int main(){ scanf("%s",s); int l=strlen(s); int r=l/20; if(l%20!=0)r++; int c=l/r; if(l%r!=0) c++; int o=0,d=r*c-l; printf("%d %d\n",r,c); for(int i=0;i<r;i++){ for(int j=0;j<c-1;j++){ printf("%c",s[o]); o++; } if(i<d) printf("*"); else { printf("%c",s[o]); o++; } printf("\n"); } }
#include<bits/stdc++.h> using namespace std; const int maxn=2e5+5; int n,a[maxn],b[maxn]; int vis[maxn][6]; void dfs(int i,int l){ if(i>n){ for(int i=1;i<=n;i++) printf("%d ",b[i]); exit(0); } if(vis[i][l]) return; vis[i][l]=1; for(int f=1;f<=5;f++){ if(a[i-1]<a[i]&&l<f){ b[i]=f; dfs(i+1,f); } if(a[i-1]>a[i]&&l>f){ b[i]=f; dfs(i+1,f); } if(a[i-1]==a[i]&&f!=l){ b[i]=f; dfs(i+1,f); } } } int main(){ scanf("%d",&n); a[0]=maxn; for(int i=1;i<=n;i++) scanf("%d",&a[i]); dfs(1,5); printf("-1\n"); }
#include<bits/stdc++.h>
using namespace std;
int main(){
double x1,y1,x2,y2,a,b,c;
double xa[3],ya[3],xb[3],yb[3];
double ans;
scanf("%lf%lf%lf",&a,&b,&c);
scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2);
ans=fabs(x1-x2)+fabs(y1-y2);
xa[1]=x1;
ya[1]=-(c+a*xa[1])/b;
ya[2]=y1;
xa[2]=-(c+b*ya[2])/a;
xb[1]=x2;
yb[1]=-(c+a*xb[1])/b;
yb[2]=y2;
xb[2]=-(c+b*yb[2])/a;
for(int i=1;i<=2;i++)
for(int j=1;j<=2;j++)
ans=min(ans,(fabs(x1-xa[i])+fabs(x2-xb[j])+fabs(y1-ya[i])+fabs(y2-yb[j])+hypot(xa[i]-xb[j],ya[i]-yb[j])));
printf("%.10lf\n",ans);
}
http://codeforces.com/contest/1078/problem/B
#include<bits/stdc++.h>
using namespace std;
const int N=105;
int n,ans,cnt[N],f[N][N*N],g[N][N*N];
set<int>s;
int main()
{
scanf("%d",&n);f[0][0]=1;
for(int i=0,x;i<n;i++)
{
scanf("%d",&x);s.insert(x);cnt[x]++;
for(int j=i;j>=0;j--)for(int k=0;k<N*N;k++)if(f[j][k])
{
f[j+1][k+x]=1;
if((k+x)%(j+1)==0&&x*j!=k)g[j+1][k+x]=1;
}
}
if(s.size()<=2){printf("%d\n",n);return 0;}
for(int i=1;i<=100;i++)for(int j=1;j<=cnt[i]&&!g[j][i*j];j++)ans=max(ans,j);
printf("%d\n",ans);
return 0;
}