CF99B Help Chef Gerasim 题解
分别对三种情况进行分类讨论。
第一种情况:
- 
显然,若 \(\sum^{n}_{i=1} a_i \bmod n \neq 0\),则输出 \(\texttt{Unrecoverable configuration.}\); 
- 
同时,我们遍历 \(a_{1 \sim n}\),若存在两个以上的 \(a_i\) 满足 \(a_i \neq \sum^{n}_{i=1} a_i \div n\),则也输出 \(\texttt{Unrecoverable configuration.}\)。 
第二种情况:
- 若 \(a_{1 \sim n}\) 满足 \(a_1=a_2=...=a_n\),则输出 \(\texttt{Exemplary pages.}\)。
第三种情况:
- 找到 \(\neq \sum^{n}_{i=1} a_i \div n\) 两个数的编号 \(x,y\),记 \(x\) 应该给予 \(y\) 的毫升数 \(a_x-\sum^{n}_{i=1} a_i \div n\) 为 \(m\)(需要保证 \(x>y\)),则输出 \(m \texttt{\ ml. from cup \#} \ y \texttt{\ to cup \#} \ x \texttt{.}\) 即可。注意输出格式。
#include<bits/stdc++.h>
using namespace std;
int n,a[1031];
int x,y,sum;
int main(){
    cin>>n;
    for(int i=1;i<=n;i++) cin>>a[i],sum+=a[i]; //读入 ai 并计算 sum
    if(sum%n!=0){ cout<<"Unrecoverable configuration."; return 0; } //第一种情况
    for(int i=1;i<=n;i++){
        if(a[i]!=sum/n&&y){ cout<<"Unrecoverable configuration."; return 0; } //还是第一种情况
        else if(a[i]!=sum/n){ y=x,x=i; } //从题解中学来的赋值方法
    }
    if(a[x]<a[y]) swap(x,y); //需要保证 x > y
    if(!x&&!y){ cout<<"Exemplary pages."; return 0; } //第二种情况
    cout<<a[x]-sum/n<<" ml. from cup #"<<y<<" to cup #"<<x<<"."; //第三种情况
    return 0;
}
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号