小希的数表题解
Posted chenhongarticles
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小希的数表题解相关的知识,希望对你有一定的参考价值。
代码:
1 #include<iostream> 2 #include<cstring> 3 #include<algorithm> 4 #define N 5005 5 using namespace std; 6 7 int a[N*(N-1)/2]; 8 int b[N*(N-1)/2]; 9 //int c[N*(N-1)/2]; 10 //bool flag[N*(N-1)/2]; 11 int x[N+5]; 12 13 int Add(int i,int j) 14 { 15 return x[i]+x[j]; 16 } 17 18 int main() 19 { 20 int n; 21 while(cin>>n) 22 { 23 if(n==0) 24 { 25 break; 26 } 27 memset(x,0,sizeof(x)); 28 memset(a,0,sizeof(a)); 29 for(int i=1; i<=n*(n-1)/2; i++) 30 { 31 cin>>a[i]; 32 b[i]=a[i]; 33 } 34 //sort(a+1,a+1+(n*(n-1)/2)); 35 for(int l=3; l<=n; l++) 36 { 37 for(int i=1; i<=n*(n-1)/2; i++) 38 { 39 a[i]=b[i]; 40 } 41 x[3]=(a[2]-a[1]+a[l])/2; 42 x[2]=a[l]-x[3]; 43 x[1]=a[1]-x[2]; 44 if(n==3) 45 { 46 cout<<x[1]<<" "<<x[2]<<" "<<x[3]<<endl; 47 continue; 48 } 49 //x[4]=a[4]-x[1]; 50 51 for(int i=2; i<=3; i++) 52 { 53 for(int j=1; j<i; j++) 54 { 55 for(int k=1; k<=n*(n-1)/2; k++) 56 { 57 if(a[k]==Add(j,i)) 58 { 59 a[k]=-1; 60 break; 61 } 62 } 63 //flag[Add(i,j)]=1; 64 } 65 66 } 67 68 for(int i=4; i<=n; i++) 69 { 70 for(int j=1; j<i; j++) 71 { 72 //flag[Add(i,j)]=1; 73 if(j==1) 74 { 75 int k=1; 76 for(; k<=n*(n-1)/2; k++) 77 { 78 79 if(a[k]!=-1) 80 { 81 //temp=a[k]; 82 break; 83 } 84 85 } 86 x[i]=a[k]-x[1]; 87 //cout<<x[i]<<endl; 88 } 89 for(int k=1; k<=n*(n-1)/2; k++) 90 { 91 if(a[k]==Add(j,i)) 92 { 93 a[k]=-1; 94 break; 95 } 96 } 97 //flag[Add(x[j],x[i])]=0; 98 } 99 100 } 101 for(int i=1; i<=n*(n-1)/2; i++) 102 { 103 a[i]=b[i]; 104 } 105 bool can=1; 106 for(int i=2; i<=n; i++) 107 { 108 for(int j=1; j<i; j++) 109 { 110 bool mark=0; 111 for(int k=1; k<=n*(n-1)/2; k++) 112 { 113 if(a[k]==Add(j,i)) 114 { 115 //cout<<b[k]<<endl; 116 a[k]=-1; 117 mark=1; 118 break; 119 } 120 } 121 if(mark==0) 122 { 123 can=0; 124 //cout<<"111"<<endl; 125 break; 126 } 127 } 128 if(can==0) 129 { 130 //cout<<"222"<<endl; 131 break; 132 } 133 134 } 135 if(can==1) 136 { 137 for(int i=1; i<=n; i++) 138 { 139 if(i<n) 140 { 141 cout<<x[i]<<" "; 142 } 143 else 144 { 145 cout<<x[i]<<endl; 146 } 147 } 148 break; 149 } 150 } 151 152 } 153 return 0; 154 }
以上是关于小希的数表题解的主要内容,如果未能解决你的问题,请参考以下文章