题意:
第一行给两个数,n 和 A,n 表示有n 个骰子,A表示 n 个骰子掷出的数的和。第二行给出n个数,表示第n个骰子所能掷出的最大的
数,这些骰子都有问题,可能或多或少的掷不出几个数,输出n个骰子掷不出的数的个数。
输入:
2 8 4 4
1 3 5
2 3 2 3输出:
3 3
4
0 1
分析:
先将能够掷出的最大的数都加起来,之后求出除该骰子之外的所能掷的最大数和最小数,就可以确定该骰子不可以掷出的数的区
间:可掷最大数+能掷最小数-能掷最大数-1。
代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=200000+10;
ll sum,a[maxn],A;
int main()
{
int n;
scanf("%d%I64d",&n,&A);
for(int i=0;i<n;i++)
{
scanf("%I64d",&a[i]);
sum+=a[i];
}
for(int i=0;i<n;i++)
{
int mmin=max(1ll,A-(sum-a[i]));
int mmax=min(a[i],A-(n-1)*1);
printf("%I64d ",a[i]+mmin-mmax-1);
}
printf("\n");
return 0;
}