菜鸟生成记(57)

1334: PIPI计数

本以为就是一个简单STL查找的水题,谁曾想被卡卡时间了

cin输入被卡了,map+scanf+printf==AC

map+cin+cout==T;可能数据太大了

map内置数据结构为红黑树查找和储存效率O(logn);

unordered_map内置数据结构为哈希表(散列表);哈希函数选的好的话,散列地址不大量冲突的话,储存效率O(1),也就是常量级;查找应该也是O(1);那这效率就很可观了(这好的数据结构不是蒻羁想到,是我在洛谷上从dalao那问来的)

unordered_map使用是要注意几点(一个不注意程序就崩了)

(1)要加头文件,一种奇怪的写法,暂时不懂

#include <tr1/unordered_map>
using std::tr1::unordered_map;

(2)要写一个哈希函数,用来应对散列地址冲突,哈希函数构造的好,代码效率直接起飞,反之直接蹦;我的函数哈希函数随便写的,居然没蹦?

两个数据结构各有千秋,就这一题而言unordered_map更快

map(AC)

#include<iostream>
#include<algorithm>
#include<map>
#include<cstdio>
using namespace std;
const int N=1e5+10;
int next1[4][2]={1,0,0,1,0,-1,-1,0};
struct st{int x,y;int num;st(){num=0;}
};
class mp{//map排序规则(没这个会报错) public:bool operator()(const st &a,const st &b)const{return (a.x<b.x)||(a.x==b.x&&a.y<b.y)||(false);}
};
/*
4
1 1
0 1
1 0
1 2
*/
int main()
{int n;int x,y;int nx,ny,num=0;st t;st s[N];map<st,int,mp>m;scanf("%d",&n);for(int i=0;i<n;i++){scanf("%d%d",&x,&y);s[i].x=x;s[i].y=y;t.x=x;t.y=y;m.insert(make_pair(t,1));}for(int i=0;i<n;i++){x=s[i].x;y=s[i].y;nx=ny=0;num=0;for(int j=0;j<4;j++){nx=next1[j][0]+x;ny=next1[j][1]+y;t.x=nx;t.y=ny;if(m.find(t)!=m.end()){num++;  }   }printf("%d\n",num);}return 0;
}

unordered_map(AC)

#include<iostream>
#include<cstdio>
#include<tr1/unordered_map>
using std::tr1::unordered_map;
using namespace std;
const int N=1e+5+10;
int next1[4][2]={1,0,0,1,0,-1,-1,0};
class st{public:int x,y;int num;st(){num=0;}
}s[N];
class hash_v{//哈希函数 public:size_t operator()(const pair<int,int>&p)const{//这是我自己随便写的;//通过函数给key一个值,然后地址储存 return p.first*111+p.second;}
};
struct pair_hash {//哈希函数
//这是百度的,也能用,但是不太理解 template<class t1, class t2>std::size_t operator() (const std::pair<t1, t2>& p) const {return std::tr1::hash<t1>{}(p.first)^std::tr1::hash<t2>{}(p.second);}
};
int read()//输入加速挂
{char ch=' ';int ans=0;while(ch<'0' || ch>'9')ch=getchar();while(ch<='9' && ch>='0'){ans=ans*10+ch-'0';ch=getchar();}return ans;
}
void out(int a)//输出加速挂
{if(a > 9){out(a/10);}putchar(a%10 + '0');
}
/*
4
1 1
0 1
1 0
1 2
*/
int main()
{unordered_map<pair<int,int>,int,hash_v>m;//创建一个对象 int n;int x,y;int nx,ny,num=0;pair<int,int>t;n=read();for(int i=0; i<n; i++) { x=read();y=read();s[i].x=x;s[i].y=y;t.first=x;t.second=y;m.insert(make_pair(t,true));//存入哈希表 }for(int i=0; i<n; i++){x=s[i].x;y=s[i].y;nx=ny=0;num=0;for(int j=0; j<4; j++)//该点的四个方向 {nx=next1[j][0]+x;ny=next1[j][1]+y;t.first=nx;//t为一个点 t.second=ny;if(m.find(t)!=m.end())//散列查找 {num++;}}s[i].num=num;//该点相邻点计数 }for(int i=0; i<n; i++){//输出 //printf输出也行,cout输出会超时 out(s[i].num);printf("\n");}return 0;
}

PIPI OJ 1334: PIPI计数(unordered_map的应用)相关推荐

  1. PIPI OJ 1118: 继续畅通工程(并查集+最小生成树)

    菜鸟生成记(18) 1118: 继续畅通工程 又双叒叕是最短路径的水题;不同的是,在构造最小生成树前,题目中已经规定一些已经建好了(这些边已经在生成树里面了);从未建好的边中选择最优边加入生成树;直到 ...

  2. [山东科技大学OJ]1334 Problem D: 动态的字符串排序

    Time Limit: 5 Sec  Memory Limit: 128 MB Submit: 11171  Solved: 3405 [Submit][Status] Description 把字符 ...

  3. [unknown OJ] ZZH与计数

    一.题目 点此看题 二.解法 这题我一开始是想的设 d p [ i ] dp[i] dp[i] 为数 i i i 有多少个的期望,然后跑矩阵乘法可以做到 O ( 2 3 n log ⁡ m ) O(2 ...

  4. PIPI的逃跑路线Ⅳ

    题目描述 获得阎魔刀的PIPI终于得到了"抛瓦",是时候向POPO决一死战复仇了. 已知PIPI初始为X点HP值,而POPO初始为Y点HP值,双方血条无上限.PIPI决定在n回合内 ...

  5. Java基础学习总结(10)——static关键字

    2019独角兽企业重金招聘Python工程师标准>>> 一.static关键字 原来一个类里面的成员变量,每new一个对象,这个对象就有一份自己的成员变量,因为这些成员变量都不是静态 ...

  6. java基础提升篇:Static关键字

    Static变量 static关键字 在类中用static声明的成员变量为静态成员变量,它为该类的公用变量,在第一次使用时初始化,对于该类的所有对象来说,static成员变量只有一份. 可以通过引用或 ...

  7. JAVA API个各种方法

    熟练掌握常用类及方法 String str1.startsWith(str2) 判断str1是否以str2开头,返回true或false str1.endsWith(str2) 判断str1是否以st ...

  8. 【java基础】java关键字总结及详解

    Java关键字是电脑语言里事先定义的,有特别意义的标识符,有时又叫保留字,还有特别意义的变量.Java的关键字对Java的编译器有特殊的意义,他们用来表示一种数据类型,或者表示程序的结构等,关键字不能 ...

  9. vim技巧总结-查找

    2019独角兽企业重金招聘Python工程师标准>>> vim技巧总结-查找1.查找命令 1.1 执行一次查找 普通模式下,/会调用查找提示符,如果vim扫描到文档尾部仍没有找到目标 ...

最新文章

  1. c# ArrayList
  2. 动态追踪技术思想及应用
  3. Kaggel实战:识别手写体[knn改进算法]
  4. iOS手势之pinch
  5. 不再有神的概念,将所有存在称之为文明,这很有意思
  6. bzoj1715[Usaco2006 Dec]Wormholes 虫洞
  7. JAVA-重写equalse规范、技巧
  8. [leetcode]Pascal#39;s Triangle II
  9. java登录界面命令_Java命令行界面(第15部分):Jargo
  10. SpringBoot 使用AOP功能
  11. android循环请求数据,android – Camera2 ImageReader冻结重复捕获请求
  12. 使用 ReSharper对.NET解决方案进行全面重构
  13. 在计算机中 ascii码是几位二进制编码,ASCII码采用多少位二进制编码
  14. 【html和css入门】实现简单的页首导航
  15. k2p拆机ttl刷breed_最新k2p 22.10.3.42;22.10.3.38和k2 22.6.532.231拆机ttl刷breed图文教程
  16. vs2010英文版变中文版
  17. 用.NET设计一个假装黑客的屏幕保护程序
  18. 面试一个应届生,从不起眼到令人刮目相看
  19. 【NLP】⚠️学不会打我! 半小时学会基本操作 8⚠️ 新闻分类
  20. 什么是大数据?大数据的特点?

热门文章

  1. 毕业设计总结——自闭症儿童识别面部表情训练系统
  2. 一个草根站长的逆袭之旅
  3. 前端通用下载文件方法(兼容IE10及以上)
  4. 北京科技大学通用学术英语作文Mooc 大一上(20级版)
  5. HTML_CSS教程
  6. 15分钟!一键部署Oracle 12CR2单机CDB+PDB
  7. Python—end=用法
  8. matlab预测缺失,matlab数据缺失预测
  9. 探索编程的极限:挑战炫技代码
  10. 爬取千库网ppt_前程无忧爬虫、数据清洗及可视化