蓝桥杯细节补充

复制代码
struct m{
    int i,j,k;
    bool operator< (const m & t){
        if(i!=t.i) return i<t.i;
        if(j!=t.j) return j<t.j;
        return k<t.k;
    }
}m[N];
//进行结构体的比较时,重载运算符规定好规则,然后用sort进行排序

  sort(m,m+num);
复制代码

1221. 四平方和

https://www.acwing.com/problem/content/description/1223/

启发::利用空间换时间、

将四层循环分成两个两层循环,将前面的循环结果进行保存,然后后面的结果进行判断,利用二分取出相应的结果

复制代码
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
const int N=5000010;
struct m{
    int i,j,k;
    bool operator< (const m & t){
        if(i!=t.i) return i<t.i;
        if(j!=t.j) return j<t.j;
        return k<t.k;
    }
}m[N];


int main()
{
    int n;cin>>n;int num=0;
   for(int i=0;i*i<=n;i++){
       for(int j=i;i*i+j*j<=n;j++){
           m[num++]={i*i+j*j,i,j};
       }
   }
   sort(m,m+num);
   
   for(int i=0;i*i<=n;i++){
       for(int j=i;j*j+i*i<=n;j++){
           int k=n-i*i-j*j;
           int l=0,r=num;
           while(l<r){
               int mid=l+r>>1;
               if(m[mid].i>=k) r=mid;
               else l=mid+1;
           }
           if(m[l].i==k){
               cout<<i<<" "<<j<<" "<<m[l].j<<" "<<m[l].k<<endl;
               exit(0);
           }
       }
   }
    return 0;
}
复制代码

哈希

复制代码
#include<unordered_map>//引用头文件


#define x first
#define y second

typedef pair<int, int> PII;

unordered_map<int, PII> S;

S.count(t)  //if t存在返回0

S[t] = {c, d};

if (S.count(t))
{
printf("%d %d %d %d\n", a, b, S[t].x, S[t].y);
return 0;
}
复制代码

 

posted @   敲代码的6  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示