题意:给你n个筛子,第 i 个筛子有 可以表示范围 1-a[i]的数,给你最后筛子和,问你每个筛子不可能的值有多少个。
解题思路:得到每个筛子的取值范围。
解题代码:
1 // File Name: c.cpp 2 // Author: darkdream 3 // Created Time: 2015年04月13日 星期一 00时38分58秒 4 5 #include<vector> 6 #include<list> 7 #include<map> 8 #include<set> 9 #include<deque> 10 #include<stack> 11 #include<bitset> 12 #include<algorithm> 13 #include<functional> 14 #include<numeric> 15 #include<utility> 16 #include<sstream> 17 #include<iostream> 18 #include<iomanip> 19 #include<cstdio> 20 #include<cmath> 21 #include<cstdlib> 22 #include<cstring> 23 #include<ctime> 24 #define LL long long 25 26 using namespace std; 27 LL n , m ; 28 LL a[200005]; 29 int main(){ 30 scanf("%I64d %I64d",&n,&m); 31 LL sum = 0 ; 32 for(int i = 1;i <= n;i ++) 33 { 34 scanf("%I64d",&a[i]); 35 sum += a[i]; 36 } 37 for(int i = 1;i <= n;i ++) 38 { 39 LL tsum = sum - a[i]; 40 LL mx = min(a[i],m-(n-1)); 41 LL mi = (m-tsum); 42 if(mi <= 0) 43 mi = 1; 44 printf("%I64d ",a[i]-(mx-mi+1)); 45 } 46 return 0; 47 }