分别对三种情况进行分类讨论。
第一种情况:
-
显然,若 \(\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;
}
标签:输出,CF99B,题解,sum,texttt,Chef,int,div,neq
From: https://www.cnblogs.com/XOF-0-0/p/18062517