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(思路)

时间: 2025-01-18 08:38:57

CodeForces 534C - Polycarpus' Dice(思路)的相关文章

Codeforces 534C Polycarpus&#39; Dice 构造

题意:给你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 #includ

CodeForces 534C Polycarpus&#39; Dice (数学)

题意:第一行给两个数,n 和 A,n 表示有n 个骰子,A表示 n 个骰子掷出的数的和.第二行给出n个数,表示第n个骰子所能掷出的最大的数,这些骰子都有问题, 可能或多或少的掷不出几个数,输出n个骰子掷不出的数的个数. 析:我们只要考虑两个极端就好,考由其他骰子投出的最大值和最小值,还有自身在最大值和最小值,作一个数学运算就OK了.公式如下: 骰子的最大值-能投的最大值+能投的最小值-1. 代码如下: #include <cstdio> #include <string> #inc

Codeforces534C:Polycarpus&#39; Dice

Polycarp has n dice d1,?d2,?...,?dn. The i-th dice shows numbers from 1 to di. Polycarp rolled all the dice and the sum of numbers they showed is A. Agrippina didn't see which dice showed what number, she knows only the sum A and the values d1,?d2,?.

#298 (div.2) C. Polycarpus&#39; Dice

1.题目描述:点击打开链接 2.解题思路:本题是一道数学题,很可惜在比赛时候没有注意到最大数的范围,然后被Hack了,瞬间rating变得不忍直视==.还是耐心总结,好好准备下一场比赛吧.本题要求找每个筛子不可能出现的数字的个数.可以通过确定可能值的边界来解决.假设所有筛子出现的数字之和是tot,那么每个筛子的最大范围是min(A-(n-1),num[i]),即当其他筛子都取1时的情况和筛子i自身的最大值的较小者.同理不难得到最小范围是max(1,A-(tot-num[i])).这样以来,不可能

C. Polycarpus&#39; Dice

在每个位置讨论一下最大值最小值的取值范围就行 1 #include<cstdio> 2 #include<iostream> 3 #define maxn 200003 4 using namespace std; 5 typedef long long LL; 6 LL a[maxn],b[maxn]; 7 8 int main() 9 { 10 LL n,s; 11 while(scanf("%I64d %I64d",&n,&s)!=EOF)

Codeforces Round #298 (Div. 2) A、B、C题

题目链接:Codeforces Round #298 (Div. 2) A. Exam An exam for n students will take place in a long and narrow room, so the students will sit in a line in some order. The teacher suspects that students with adjacent numbers (i and i + 1) always studied side

Codeforces Round #298 (Div. 2)

A - Exam 构造 1 #include <cstdio> 2 3 int ans[5000 + 5]; 4 5 int main() { 6 int n, cnt = 1; 7 scanf("%d", &n); 8 for (int i = 1; i <= n; i++) { 9 if (i&1) ans[i] = cnt; 10 else { 11 ans[i] = n+1-cnt; 12 cnt++; 13 } 14 } 15 ans[0]

20170906

水题 T1 Arpa and a research in Mexican wave CodeForces - 851A 1 #include<cstdio> 2 int n,k,t; 3 int main() 4 { 5 scanf("%d%d%d",&n,&k,&t); 6 if(t>=k&&t<=n) 7 printf("%d",k); 8 else if(t<k) 9 printf(&quo

第三届H-star 程序设计竞赛初赛题解

1.剪纸片:这是一道简单的题目,假如你身边有一张纸,一把剪刀,在H-star的比赛现场,你会这么做:(1). 将这张纸剪成两片(平行于短边剪开):(2)将其中一片剪成一个圆,作为圆柱的底面:(3) 纸的另一片的一边沿着圆的周长将圆围起来,直到围成一圈,形成一个无盖的圆柱体.需要注意的是,纸片可能会有重叠部分.聪明的你机智的你喜欢思考的你这时候就开始想,一张纸片按上述方式所组成的圆柱的最大体积是多少呢?请你用编程解决这个问题. 输入 输入第一行包含一个数字t代表接下来有t组数据: 接下来的t行,输