CodeForces 534C - Polycarpus' Dice(思路)
Posted TianTengtt
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CodeForces 534C - Polycarpus' Dice(思路)相关的知识,希望对你有一定的参考价值。
题意:给定n (1 <= n <= 2*10^5) 个骰子,给定每个骰子最大可以掷出的最大数(最小数始终为1),给定所有骰子掷出的点数和A,求每个骰子不可能掷出的点数个数。
考虑最大和最小情况,作差即可(详情见代码注释)
#include<cstdio> #include<cstring> #include<cctype> #include<cstdlib> #include<cmath> #include<iostream> #include<sstream> #include<iterator> #include<algorithm> #include<string> #include<vector> #include<set> #include<map> #include<deque> #include<queue> #include<stack> #include<list> typedef long long ll; typedef unsigned long long llu; const int MAXN = 100 + 10; const int MAXT = 200000 + 10; const int INF = 0x7f7f7f7f; const double pi = acos(-1.0); const double EPS = 1e-6; using namespace std; int n; ll a[MAXT], A; int main(){ scanf("%d%I64d", &n, &A); ll allsum = 0; //所有骰子最大值加起来的总最大值 for(int i = 0; i < n; ++i){ scanf("%I64d", a + i); allsum += a[i]; } for(int i = 0; i < n; ++i){ ll down = max(1ll, A - (allsum - a[i])); //骰子最小值 = 需要的和 - 其他骰子已经全部最大的值 ll up = min(a[i], A - (n - 1)); //骰子最大值 = 需要的和 - 其他骰子全部最小值 if(i) printf(" "); printf("%I64d", a[i] - (up - down + 1)); //不可能出现的数 = 总共可以表示的数 - 已经能表示的数 } return 0; }
以上是关于CodeForces 534C - Polycarpus' Dice(思路)的主要内容,如果未能解决你的问题,请参考以下文章