已经红温。
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int mod = 998244353;
int n,q,ans,xx;
struct node{
int l,r;
}e[10];
int x,y;
void exgcd(int a, int b)
{
if(b == 0)
{
x = 1;
y = 0;
return;
}
exgcd(b, a % b);
int Last_x = x;
x = y;
y = Last_x - a / b * y;
}
int s[10];
int f(){
int u = 0,q=0;
for(int i=1;i<=n;i++){
u+=s[i],u%=mod;
}
x=y=0;
exgcd(n, mod);
x = (x % mod + mod) % mod;
u = u * x % mod;
for(int i = 1;i<=n;i++){
s[i]%=mod;
q+=(((s[i]-u)%mod+mod)*((s[i]-u)%mod)%mod+mod)%mod;
q%=mod;
}
q = q * x % mod;
return q;
}
void dfs(int k,int sum){
if(k==n+1&&sum==xx){
if(ans==1e18) ans = f();
else ans = min(ans,f());
return;
}
if(k==n+1) return;
for(int i=e[k].l;i<=e[k].r;i++){
s[k]=i;
dfs(k+1,sum+i);
}
}
signed main(){
scanf("%lld%lld",&n,&q);
for(int i=1;i<=n;i++){
scanf("%lld%lld",&e[i].l,&e[i].r);
}
while(q--){
scanf("%lld",&xx);
ans = 1e18;
dfs(1,0);
printf("%lld\n",ans%mod);
}
return 0;
}
PS:有理数取余的部分是那道模板题第一篇题解乱搞过来的(因为不会)。((