http://codeforces.com/contest/488/problem/B
两份代码
这道题虽然不难,但是好麻烦的说= =,还是自己思维不够纯熟,不能很有条理的写下每一种情况,从题目要求可以得到 a<=b<=c<=d,a+d==b+c,a:d==1:3.
这些就足够了,剩下就是不断判断,第一份是WArush出来的,第二份是整理下思维重写的,虽然看不出来啥区别= =
#include<algorithm>
#include<iostream>
using namespace std;
int main()
{
int n;
cin>>n;
int a[4];
for (int i=0;i<n;i++)
cin>>a[i];
sort(a,a+n);
if (n==0)
cout<<"YES"<<endl<<1<<endl<<2<<endl<<2<<endl<<3<<endl;
if (n==1)
cout<<"YES"<<endl<<4*a[0]/2<<endl<<4*a[0]-4*a[0]/2<<endl<<3*a[0]<<endl;
if (n==2)
{
if (3*a[0]<a[1])
{
cout<<"NO"<<endl;
return 0;
}
cout<<"YES"<<endl<<4*a[0]-a[1]<<endl<<3*a[0]<<endl;
}
if (n==3)
{
if (a[2]/3<=a[0]&&a[0]+a[1]==a[2]+a[2]/3&&a[2]-a[2]/3==(a[0]+a[1])/2)
{
cout<<"YES"<<endl<<a[2]/3<<endl;
return 0;
}
if (3*a[0]<a[2])
{
cout<<"NO"<<endl;
return 0;
}
if (a[0]*3!=a[2]&&(a[1]+a[2])!=4*a[0])
{
cout<<"NO"<<endl;
return 0;
}
cout<<"YES"<<endl;
if (a[2]==3*a[0]) cout<<4*a[0]-a[1]<<endl;
else
cout<<3*a[0]<<endl;
}
if (n==4)
{
if ((a[0]<=a[1])&&(a[1]<=a[2])&&(a[2]<=a[3])&&(a[0]*3==a[3])&&(a[0]+a[3]==a[1]+a[2]))
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
}
第二份:
#include<iostream>
#include<algorithm>
using namespace std;
bool isok(int a,int b,int c,int d)
{
if ((a<=b)&&(b<=c)&&(c<=d)&&(a*3==d)&&(a+d==b+c))
return true;
else
return false;
}
int main()
{
int n;
cin>>n;
int a[4];
for (int i=0; i<n; i++)
cin>>a[i];
sort(a,a+n);
if (n==0)
cout<<"YES"<<endl<<1<<endl<<2<<endl<<2<<endl<<3<<endl;
if (n==1)
cout<<"YES"<<endl<<4*a[0]/2<<endl<<4*a[0]-4*a[0]/2<<endl<<3*a[0]<<endl;
if (n==2)
{
if (3*a[0]<a[1])
{
cout<<"NO"<<endl;
return 0;
}
cout<<"YES"<<endl<<4*a[0]-a[1]<<endl<<3*a[0]<<endl;
}
if (n==3)
{
if (isok(a[2]/3,a[0],a[1],a[2]))
{
cout<<"YES"<<endl<<a[2]/3<<endl;
return 0;
}
if (isok(a[0],4*a[0]-a[1],a[1],a[2]))
{
cout<<"YES"<<endl<<a[0]*4-a[1]<<endl;
return 0;
}
if(isok(a[0],a[1],4*a[0]-a[1],a[2]))
{
cout<<"YES"<<endl<<a[0]*4-a[1]<<endl;
return 0;
}
if (isok(a[0],a[1],a[2],a[0]*3))
{
cout<<"YES"<<endl<<a[0]*3<<endl;
return 0;
}
cout<<"NO"<<endl;
return 0;
}
if (n==4)
{
if ((a[0]<=a[1])&&(a[1]<=a[2])&&(a[2]<=a[3])&&(a[0]*3==a[3])&&(a[0]+a[3]==a[1]+a[2]))
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
return 0;
}