9. 倍数问题
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e5;
ll nn,k,vis[maxn],tmp[maxn],num[maxn];
vector<ll>vc;
ll dfs(ll n)
{
if(n>=3)
{
ll t=tmp[0]+tmp[1]+tmp[2];
if(t%k==0)
vc.push_back(t);
}
else
for(int i=0;i<nn;i++)
if(vis[i]==0)
tmp[n]=num[i],vis[i]=1,dfs(n+1),vis[i]=0;
}
int main()
{
scanf("%lld%lld",&nn,&k);
memset(vis,0,sizeof(vis));
memset(num,0,sizeof(num));
memset(tmp,0,sizeof(tmp));
for(int i=0;i<nn;i++)
scanf("%lld",&num[i]);
dfs(0);
ll ans=0;
for(int i=0;i<vc.size();i++)
ans=max(ans,vc[i]);
printf("%lld\n",ans);
return 0;
}
10. 付账问题
#include<bits/stdc++.h>
using namespace std;
const int maxn = 5e5+5;
int a[maxn],n,s;
int main()
{
scanf("%d %d",&n,&s);
for(int i = 0;i<n;i++)
scanf("%d",&a[i]);
double avg=(double)s/n,ls=double(s),nowavg=avg,dis=0;
sort(a,a+n);
for(int i=0;i<n;i++)
{
if(a[i]<nowavg)
{
dis+=(a[i]-avg)*(a[i]-avg);
ls-=a[i];
nowavg=ls/(n-i-1);
}
else
{
dis+=(nowavg-avg)*(nowavg-avg);
ls-=nowavg;
}
}
printf("%.4lf\n",sqrt(dis/n));
return 0;
}