1. 程式人生 > >51nod 1267二分+優化試驗場

51nod 1267二分+優化試驗場

萬能 bre get sin ont log syn void span

最初,最開始的時候,萬能的學姐曾經警告過我們,千萬別用什麽老獅子MAP,手擼map或者字典樹。。。當時不甚理解。。。今天。。。這題直接卡掉了我的MAP,但是使用樸素方法進行二分。。。不加優化,,都不需要這個架勢。。。直接相差了將近十倍,在我開了優化之後快了20倍左右。。。。

上代碼:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 
 4 const long long MAXN=1233;
 5 
 6 
 7 class node
 8 {
 9     public:
10     long long a,b,summ;
11 12 }; 13 node nodes[MAXN*MAXN]; 14 bool cmp(node n,node n1) 15 { 16 return n.summ<n1.summ; 17 } 18 long long n; 19 long long arr[MAXN]; 20 long long app[MAXN]; 21 long long appoint=0; 22 long long point=0; 23 bool check(node &n1,node &n2) 24 { 25 if(n1.a==n2.a)return false; 26 if
(n1.a==n2.b)return false; 27 if(n1.b==n2.a)return false; 28 if(n1.b==n2.b)return false; 29 return true; 30 } 31 void init() 32 { 33 cin>>n; 34 for(int i=0;i<n;++i) 35 { 36 cin>>arr[i]; 37 } 38 39 for(int i=0;i<n;++i) 40 { 41 for(int
j=i+1;j<n;++j) 42 { 43 nodes[point].a=i; 44 nodes[point].b=j; 45 nodes[point].summ=arr[i]+arr[j]; 46 point++; 47 } 48 }sort(nodes,nodes+point,cmp); 49 } 50 51 bool succ=0; 52 set<long long>s1; 53 int main() 54 { 55 cin.sync_with_stdio(false); 56 init(); 57 for(int i=0;i<point;++i) 58 { 59 if(s1.count(nodes[i].summ))continue; 60 s1.insert(nodes[i].summ); 61 if() 62 63 node n1=nodes[i]; 64 n1.summ=-n1.summ; 65 int pos=lower_bound(nodes,nodes+point,n1,cmp)-nodes; 66 while(nodes[pos].summ==n1.summ) 67 { 68 if(check(nodes[pos],n1)) 69 { 70 succ=1; 71 break; 72 }pos++; 73 } 74 if(succ)break; 75 // cout<<"target: "<<n1.summ<<" answer: "<<nodes[pos].summ<<endl; 76 } 77 if(succ)cout<<"Yes"<<endl; 78 else cout<<"No"<<endl; 79 return 0; 80 }

51nod 1267二分+優化試驗場