★ 输入文件:plana.in
输出文件:plana.out
简单对比
时间限制:5 s
内存限制:128 MB
【题目描述】
SYgg和MM要出去旅行,出行前规划旅行方案时,MM给SYgg出了一个难题。她说,在她心中,不同的地方能给她不同的感受,而感受可以用喜爱值Li表示出来,她希望这次旅行能正好得到W的喜爱值。为了考验SYgg是否爱他,她只是给了SYgg所有的Li和W值,却并不告诉SYgg哪个是哪个…
SYgg手头比较紧,只能支付去三个地方的费用,所以SYgg必须从这些数中找出三个Li和一个W,并且使W尽量的大。
SYgg一心想和MM去旅行,哪里有时间想这个问题,所以,交给了SYoi同仁的你…
【输入格式】
输入数据有两组(为了防止No Solution骗分)。
对于每一组,第一行n表示有n个数值,接下来n行为每个数值的大小。
【输出格式】
两组输出。分别为每组的答案。如果可以找出三个Li和一个W,那么就输出最大的W,如果不能,就输出No Solution
【样例输入】
4 5 5 5 5 4 1 2 3 6
【样例输出】
No Solution 6
【提示】
对于30%的数据,1≤n≤100
对于100%的数据,1≤n≤1000,Li和W都属于[−536870911,536870911]
输了,只有80;
1 #include<map> 2 #include<cstdio> 3 #include<algorithm> 4 using namespace std; 5 const int maxn=1e3+10; 6 int n,p,ans; 7 int s[maxn]; 8 map<int,int>v; 9 bool comp(int a,int b){return a>b;} 10 int main(){ 11 freopen("plana.in","r",stdin); 12 // freopen("plana.out","w",stdout); 13 ans=-1e9; 14 scanf("%d",&n); 15 for(int i=1;i<=n;i++) scanf("%d",&s[i]); 16 for(int i=1;i<=n;i++) 17 for(int j=i+1;j<=n;j++) 18 v[s[i]+s[j]]=1; 19 sort(s+1,s+n+1,comp); 20 for(int i=1;i<=n;i++) 21 for(int j=1;j<=n;j++) 22 if(v[s[i]-s[j]]==1) ans=max(ans,s[i]),p=1; 23 if(p==1) printf("%d ",ans); 24 else puts("No Solution"); 25 ans=-1e9; 26 scanf("%d",&n); 27 for(int i=1;i<=n;i++) scanf("%d",&s[i]); 28 for(int i=1;i<=n;i++) 29 for(int j=i+1;j<=n;j++) 30 v[s[i]+s[j]]=2; 31 sort(s+1,s+n+1,comp); 32 for(int i=1;i<=n;i++) 33 for(int j=1;j<=n;j++) 34 if(v[s[i]-s[j]]==2) ans=max(ans,s[i]),p=2; 35 if(p==2) printf("%d ",ans); 36 else puts("No Solution"); 37 return 0; 38 }