USACO 2016 JANUARY CONTEST, BRONZE PROBLEM 1. PROMOTION COUNTING

来源:互联网 发布:岸谷新罗知乎 编辑:程序博客网 时间:2024/06/10 05:05
奶牛 Bessie 正在帮助 Farmer John 管理美国奶牛奥林匹克(USACO),一个参赛者可以通过回答具有挑战性的问题来证明他们精通养牛琐事的在线竞赛。
考虑到参赛者的背景不同,为了让赛事的范围更广阔,Farmer John 最近扩张了竞赛的规模,包含四个难度不同的级别:铜牌组、银牌组、金牌组和铂金组。所有新参赛的选手都从铜牌组起步,而每当他们得到一定的分数时即可提升到更高的级别。一名选手可能在同一竞赛中连续提升几次。Farmer John 对所有参赛选手及他们当前所处的级别保持关注并有一份列表,那么当他举办一个竞赛的时候,他能让每个人在适当的级别起步。
当公布他最近的比赛结果时,Farmer John 希望其中包括几个数据:从铜牌组晋升到银牌组的选手数量,从银牌组晋升到金牌组的选手数量以及从金牌组晋升到铂金组的选手数量。不过,他在比赛中途忘记统计这些晋升的数量了。而 Bessie 作为一头机智的奶牛,意识Farmer John 可以通过赛前和赛后的各级别选手数量从而推断出各级别的升级选手数。
而你作为一名比 Bessie 更机智的 OIer,自然义不容辞的应该写个程序请帮她计算一下。
INPUT FORMAT (file promote.in):
输入数据由四行组成,每行包含两个整数,范围是 0..1,000,000。第一行的两个整数分别表示赛前和赛后的铜牌组选手数量;其他三行依此类推分别为银牌、金牌和铂金。
OUTPUT FORMAT (file promote.out):
请输出三行,每行只有一个整数。第一行表示从铜牌组升级到银牌组的选手数,其余两行依此类推分别为银->金,金->铂金。
SAMPLE INPUT:
1 2
1 1
1 1
1 2
SAMPLE OUTPUT:
1 11
在这个样例中,赛前每组都有 1 名选手。赛后,铜牌和铂金组有 2 名选手。造成这个变化的过程是:两名新选手加入竞赛,其中一名神犇 666 地解决了铜、银、金组的题目成功进到了铂金组;可怜另一名蒟蒻连铜牌组都搞不定,直到比赛结束还留在铜牌组里。
Problem credits: Brian Dean
Translated by smsyzx_lkb

================================================================
题目大意就是:四个组Bronze,Silver,Gold和Platinum,告诉你考前和考后有多少个人参加了比赛,问有多少个人从Bronze升到了Silver,Silver升到了Gold,Gold升到了Platinum?那么,其实我们只要关注:什么情况下会升,即可。
我们知道,升级必然是循序渐进的,不可能跳级。也就是说,升到gold的选手必定在之前已经升过了silver。这是一个很重要的原则。知道了这个,我们就可以分析。从bronze升到silver的人数,显然就是silver+gold+platinum赛后人数-赛前人数。为什么?因为从bronze升到silver的人肯定至少会待在silver里,也可能继续升,三组里面多出来的人数当然就是从bronze开始爬上来的啦。其他两组也一样。

#include<fstream>
using namespace std;
ifstream fin("promote.in");
ofstream fout("promote.out");
int bef[4],aft[4];
int main(){
for(int i=0;i!=4;++i)fin>>bef[i]>>aft[i];
fout<<aft[1]+aft[2]+aft[3]-bef[1]-bef[2]-bef[3]<<endl<<aft[2]+aft[3]-bef[2]-bef[3]<<endl<<aft[3]-bef[3]<<endl;
return 0;
}

0 0
原创粉丝点击