51nod 1267二分+优化试验场
最初,最开始的时候,万能的学姐曾经警告过我们,千万别用什么老狮子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 }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 《HelloGitHub》第 106 期
· 数据库服务器 SQL Server 版本升级公告
· 深入理解Mybatis分库分表执行原理
· 使用 Dify + LLM 构建精确任务处理应用