找到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;
}