题目:传送门

题目描述

You are given an integer array s[] and are asked to count how many positions a, b, c and d satisfy the condition: s[a] + s[b] + s[c] == s[d].
Note that a, b, c, and d do not need to be distinct.

输入

 The first line of input contains an integer T, indicates the cases.

Each of the next T blocks contains an integer n first (0< n ≤1000 ), the length of the array s[], following with n integers representing s[] (0≤ si≤10^6 ).

输出

 Output T lines each contains the answer required. You'd better use 'long long' instead of 'int'.

示例输入

4
4
0 0 0 0
2
1 3
4
1 10 100 111
1
3

示例输出

Case #1: 256
Case #2: 1
Case #3: 6
Case #4: 0 这题题意很简单,但是我比赛的时候没有做出来,当时看见几乎所有人都A了痛苦啊,就是一道简单哈希。

题意:给定一个序列,查找所有满足s[a]+s[b]+s[c]=s[d]的abcd的组数,注意,不要求abcd都不同。

分析:n<=1000,很明显O(n^3)的算法是不可能过的。式子可以转化为s[a]+s[b]=s[d]-s[c],然后复杂度就变成了O(n^2),先枚举ab,再枚举cd即可,用数组离散化。注意,因为s[a]+s[b]肯定是>=0,所以可以剪枝掉所有的s[d]-s[c]<0的情况。

#include <iostream>
#include <algorithm>
#include <stdio.h>
#include <string.h>
typedef long long ll;
using namespace std;
int n,a[],h[];
ll sum;
int main()
{
int T;
scanf("%d",&T);
for(int z=;z<=T;z++)
{
scanf("%d",&n);
sum=;
memset(h,,sizeof(h));
for(int i=;i<n;i++)
scanf("%d",&a[i]);
for(int i=;i<n;i++)
{
for(int j=;j<n;j++)
if(a[i]-a[j]>=)
h[a[i]-a[j]]++;
}
for(int i=;i<n;i++)
{
for(int j=;j<n;j++)
sum+=h[a[i]+a[j]];
}
printf("Case #%d: %lld\n",z,sum);
}
return ;
}
 

SDUT3141:Count(哈希)好题的更多相关文章

  1. HUD1686-Oulipo-kmp模板题/哈希模板题

    The French author Georges Perec (1936–1982) once wrote a book, La disparition, without the letter 'e ...

  2. D. Count the Arrays 计数题

    D. Count the Arrays 也是一个计数题. 题目大意: 要求构造一个满足题意的数列. \(n\) 代表数列的长度 数列元素的范围 \([1,m]\) 数列必须有且仅有一对相同的数 存在一 ...

  3. codevs哈希水题

    1230 多重hash练习一下,不用也可以 // // main.cpp // codeves1230 // // Created by Candy on 9/29/16. // Copyright ...

  4. Count the Sheep 思维题

    Altough Skipping the class is happy, the new term still can drive luras anxious which is of course b ...

  5. Codeforces Round #258 (Div. 2) D. Count Good Substrings 水题

    D. Count Good Substrings 题目连接: http://codeforces.com/contest/451/problem/D Description We call a str ...

  6. 【hdoj】哈希表题hdoj1425

    hdoj1425 github链接 #include<cstdio> #include<cstring> using namespace std; const int offs ...

  7. Codeforces 1188B - Count Pairs(思维题)

    Codeforces 题面传送门 & 洛谷题面传送门 虽说是一个 D1B,但还是想了我足足 20min,所以还是写篇题解罢( 首先注意到这个式子里涉及两个参数,如果我们选择固定一个并动态维护另 ...

  8. leetcode每日刷题计划-简单篇day4

    腰酸腿疼肝数模 被教育说代码风格像是小学生而且有点冗余 QAQ之前面试官好像也说过orz努力改努力改 今天把前两天跳过的vector给简单看了一下补上了 Num 14 最长公共前缀 Longest C ...

  9. TTTTTTTTTTTTTTTTTT hdu 1800 字符串哈希 裸题

    题意:意思是有若干个飞行员,需要在扫帚上练习飞行,每个飞行员具有不同的等级,且等级高的飞行员可以当等级低的飞行员的老师,且每个飞行员至多有且只有一个老师和学生.具有老师和学生关系的飞行员可以在同一把扫 ...

  10. 树hash/树哈希 刷题记录

    不同hash姿势: 树的括号序列最小表示法  s[i] 如果i为叶子节点:() 如果i的子节点为j1~jn:(s[j1]...s[jn]),注意s[j]要按照字典序排列

随机推荐

  1. windows下端口占用解决方法-查看和杀死占用端口进程

    在Windows下启动程序时有时会遇到端口被占用的情况,由于一个端口同时只能运行一个进程,所以要想启动新的程序就要先把占用该端口的进程给kill掉,具体的命令分为以下三步, 以杀死占用了80端口的进程 ...

  2. C++ 匿名对象初始化新对象

    //c++中匿名对象初始化新对象 #include<iostream> using namespace std; class Point{ public: Point(){ cout &l ...

  3. [web开发] php优势 - PHP与ASP.NET的比较

    php 优势 - PHP与ASP.NET的比较 如今当提到 Web 开发时,您有许多选择.这些方法中许多都涉及到预处理 — 即,利用特定的标记将代码嵌入到 HTML 页面中,这些标记告诉预处理器,它们 ...

  4. PHP字符串截取操作大全

    1. 截取GB2312中文字符串 <?php header("content-type:text/html;charset=gb2312"); // echo "a ...

  5. php7垃圾回收分析

  6. Target frameworks

    https://docs.microsoft.com/en-us/dotnet/standard/frameworks When you target a framework in an app or ...

  7. iOS开发之--实现倒计时显示时分秒

    这段时间写公司的一个外包项目,需要用到倒计时:需要显示时分秒,通过在网上搜集资料,找到了2中方法,我把这两种方法结合起来,可以很好的满足这个需求: 1.创建一个类继承自UIlabel,用来展示时分秒的 ...

  8. 总结界面框架_UI_Adapter

    本人定期更新经典案例及解决方案如有疑问请联系我QQ1822282728 -- 277627117   下面是常用到的ui  Demo 安卓三级筛选菜单listview(非常经典) http://dow ...

  9. Android Studio添加assets文件夹

    Step #1:调出项目结构管理区域 View->Tool Windows->Project Step #2:结构管理区域选择“Project” Step #3:新建"asset ...

  10. 合并图片、EUI顺序、CacheAsBitmap对drawcall影响的测试

    一 什么是DrawCall Draw Call 理解和优化: http://blog.csdn.net/sakyaer/article/details/44459881 draw call是openG ...