P13707 Higher Arithmetic 题解
1. 题意解释
给出
2. 思路
假如没有
假如有
如果
如果
记
若
若
若
若
然后将所有的这些数两两相乘即可。
最后步骤就是极其麻烦的表达式输出……
Hack 数据很多,造几个
3. 代码实现
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,a[100100],cnt1,cnt2;
signed main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
sort(a+1,a+1+n);
for(int i=1;i<=n;i++){
if(a[i]==1){
cnt1++;
}
if(a[i]==2){
cnt2++;
}
}
if(n==1){
cout<<a[1];
}
else{
if(cnt1<=cnt2){
if(cnt1>0){
if(cnt2>0){
cout<<"(1+2)";
for(int i=1;i<=cnt1-1;i++){
cout<<"*(1+2)";
}
for(int i=cnt1*2+1;i<=n;i++){
cout<<"*"<<a[i];
}
}
else{
cout<<a[1];
for(int i=2;i<=n;i++){
cout<<"*"<<a[i];
}
}
}
else{
for(int i=1;i<n;i++){
cout<<a[i]<<"*";
}
cout<<a[n];
}
}
else{
int cnt=cnt1-cnt2;
if(cnt%3==1){
if(cnt==1){
if(cnt2>0){
cout<<"(1+1+2)";
for(int i=1;i<=cnt2-1;i++){
cout<<"*(1+2)";
}
for(int i=1;i<=cnt/3-1;i++){
cout<<"*(1+1+1)";
}
for(int i=cnt1+cnt2+1;i<=n;i++){
cout<<"*"<<a[i];
}
}
else{
cout<<"(1+"<<a[2]<<")";
for(int i=3;i<=n;i++){
cout<<"*"<<a[i];
}
}
}
else{
if(cnt2>0){
cout<<"(1+2)";
for(int i=1;i<=cnt2-1;i++){
cout<<"*(1+2)";
}
for(int i=1;i<=cnt/3-1;i++){
cout<<"*(1+1+1)";
}
cout<<"*(1+1)*(1+1)";
for(int i=cnt1+cnt2+1;i<=n;i++){
cout<<"*"<<a[i];
}
}
else{
if(cnt/3>1){
cout<<"(1+1+1)";
for(int i=1;i<=cnt/3-2;i++){
cout<<"*(1+1+1)";
}
cout<<"*(1+1)*(1+1)";
for(int i=cnt1+cnt2+1;i<=n;i++){
cout<<"*"<<a[i];
}
}
else{
cout<<"(1+1)*(1+1)";
for(int i=cnt1+cnt2+1;i<=n;i++){
cout<<"*"<<a[i];
}
}
}
}
}
if(cnt%3==2){
if(cnt2>0){
cout<<"(1+2)";
for(int i=1;i<=cnt2-1;i++){
cout<<"*(1+2)";
}
if(cnt/3>0){
cout<<"*";
for(int i=1;i<=cnt/3;i++){
cout<<"(1+1+1)*";
}
cout<<"(1+1)";
}
else{
cout<<"*(1+1)";
}
for(int i=cnt1+cnt2+1;i<=n;i++){
cout<<"*"<<a[i];
}
}
else{
for(int i=1;i<=cnt/3;i++){
cout<<"(1+1+1)*";
}
cout<<"(1+1)";
for(int i=cnt1+cnt2+1;i<=n;i++){
cout<<"*"<<a[i];
}
}
}
if(cnt%3==0){
if(cnt2>0){
cout<<"(1+2)";
for(int i=1;i<=cnt2-1;i++){
cout<<"*(1+2)";
}
for(int i=1;i<=cnt/3;i++){
cout<<"*(1+1+1)";
}
for(int i=cnt1+cnt2+1;i<=n;i++){
cout<<"*"<<a[i];
}
}
else{
cout<<"(1+1+1)";
for(int i=1;i<=cnt/3-1;i++){
cout<<"*(1+1+1)";
}
for(int i=cnt1+cnt2+1;i<=n;i++){
cout<<"*"<<a[i];
}
}
}
}
}
return 0;
}