city


code:
#include<cstdio>
#include<vector>
#include<algorithm>
#include<cstring>
using namespace std;
int n,recnt,m[45000],cnt2=0,a[45000];
vector <int> reans;
vector <int> ans[45000];
bool v[45000];
bool judge(int x){
for(int i=0;i<n;i++)
for(int j=i+1;j<n;j++)
if(reans[i]+reans[j]==m[x])
return true;
return false;
}
void push(){
recnt++;
for(int i=0;i<reans.size();i++)
ans[recnt].push_back(reans[i]);
reans.clear();
}
void jie(int i){
reans.push_back((m[1]-m[i]+m[2])/2);
reans.push_back(m[1]-reans[0]);
reans.push_back(m[2]-reans[0]);
}
int comp(int a, int b){
for(int i=0;i<n;i++)
if(ans[a][i]>ans[b][i])
return 1;
return 0;
}
int main(){
freopen("city.in","r",stdin);
freopen("city.out","w",stdout);
scanf("%d",&n);
memset(m,0,sizeof(m));
for(int i=1;i<=n*(n-1)/2;i++)
scanf("%d",&m[i]);
sort(m+1,m+1+n*(n-1)/2);
for(int i=3;i<=n*(n-1)/2;i++){
while(m[i]==m[i+1]){i++;}
memset(v,false,sizeof(v));
v[1]=true;v[2]=true;v[i]=true;
jie(i);
bool qqq=false;
for(int gg=0;gg<reans.size()-1;gg++)
if(reans[gg]>reans[gg+1]){
reans.clear();
qqq=true;
break;
}
if(qqq==true)
continue;
for(int p=3;p<=n;p++)
if(v[p]==false)
reans.push_back(m[p]-reans[0]);
bool t=true;
for(int j=1;j<=n*(n-1)/2;j++)
if(judge(j)!=true){
t=false;
break;
}
if(t==true)
push();
else
reans.clear();
}
for(int i=1;i<=recnt;i++)
if(ans[i].size()!=0)
cnt2++;
for(int i=1;i<=cnt2;i++)
a[i]=i;
for(int i=1;i<cnt2;i++)
for(int j=1;j<cnt2;j++)
if(comp(a[i],a[i+1])==0){
int uu;
uu=a[i];
a[i]=a[i+1];
a[i+1]=uu;
}
printf("%d\n",cnt2);
for(int i=1;i<=cnt2;i++){
for(int j=0;j<n;j++)
printf("%d ",ans[a[i]][j]);
printf("\n");
}
fclose(stdin);
fclose(stdout);
return 0;
}
2days was for the city.
什么扯淡鬼题目!
idea1:wrong
sort(m)
枚举from 1 to m[1];
reans[0]=i;
reans[1]=m[2]-reans[i];
递归。
reans[i]+reans[j]==m[p]与m[p]-reans[i]==reans[j]
不能分别处理。
idea2:right:
sort(m)
ans1+ans2=m[1]
v[]=true
ans1+ans3=m[2]
v[]=true
ans2+ans3=m[i]v[]=true
解得 ans1,ans2,ans3;
a1+a4=min(m[j]&&v[j]==false)
a4.a5.a6.....
check();
posted on 2017-11-05 21:37 Sakura'duke 阅读(220) 评论(0) 收藏 举报
浙公网安备 33010602011771号