题解:

虽然是过了,不过做的十分智障

首先是有 2根 2 1 1 , 3根 1 1 1

这两种方法

然后考虑2 2 1 1

two-point-two没啥好说的

3 1 1 1

我很智障的以为数据范围是1e9

然后写了hash,刚开始还开错范围

把int换short int才卡过了空间

首先枚举 1 1 1

然后枚举3 中的一条边

既然1e7直接记录每个数能由两个数组成的方案数

另外再减去这条边参与的方案数(直接两个数减一下查有几个就好了)

然后细节还挺多的搞个对拍就可以了

#pragma G++ optimize (2)
#include <bits/stdc++.h>
using namespace std;
#define N 6000
#define rg register
#define IL inline
#define ll long long
int a[N],n;
unsigned ll ans,ans3;
#define js(x) x*(x-1)/2*(x-2)/3*(x-3)/4
const int mo1=1.3e7+;
const int NN=1.3e7+1e5;
const int mo2=2.6e7+;
const int N2=2.6e7+1e5;
int hash1[NN],hash2[NN],hash4[N2];
short int hash3[N2],hash5[N2];
char ss[<<],*A=ss,*B=ss;
inline char gc(){return A==B&&(B=(A=ss)+fread(ss,,<<,stdin),A==B)?EOF:*A++;}
template<class T>void read(T&x){
rg int f=,c;while(c=gc(),c<||<c)if(c=='-')f=-;x=c^;
while(c=gc(),<c&&c<)x=(x<<)+(x<<)+(c^);x*=f;
}
IL void push(int x)
{
int y=x%mo1;
while (hash1[y]&&hash1[y]!=x) y++;
hash1[y]=x; hash2[y]++;
}
IL int find1(int x)
{
int y=x%mo1;
while (hash1[y]&&hash1[y]!=x) y++;
if (hash1[y]==x) return(hash2[y]);
else return();
}
IL void push2(int x,int y)
{
int z=(1ll*y*+x)%mo2;
while (hash3[z]&&!(hash3[z]==x&&hash4[z]==y)) z++;
hash3[z]=x; hash4[z]=y; hash5[z]++;
}
IL int find2(int x,int y)
{
int z=(1ll*y*+x)%mo2;
while (hash3[z]&&!(hash3[z]==x&&hash4[z]==y)) z++;
if (hash3[z]==x&&hash4[z]==y) return(hash5[z]);
else return();
}
IL bool cmp(int a,int b)
{
return(a<b);
}
int now,cnt;
#define INF 1e9
int main()
{
freopen("noi.in","r",stdin);
freopen("noi.out","w",stdout);
read(n);
for (rg int i=;i<=n;i++) read(a[i]);
sort(a+,a+n+,cmp);
for (rg int i=;i<=n;i++)
for (rg int j=i+;j<=n;j++)
push(a[i]+a[j]);
a[]=INF;
for (rg int i=;i<=n;i++)
for (rg int j=i+;j<=n;j++)
push2(i,a[i]+a[j]),push2(j,a[i]+a[j]);
now=;
while (++now<=n)
{
cnt=;
while (now<n&&a[now+]==a[now]) cnt++,now++;
if (cnt>=)
{
int h=,t=n;
ll ans2=;
while (h<t)
{
int h1=h,t1=t;
while (a[h]==a[h+]&&h<t) h++;
while (a[t]+a[h]>a[now]&&h<t) t--;
if (a[t]+a[h]!=a[now])
{
h++;
continue;
}
t1=t;
while (a[t]==a[t-]&&h<t) t--;
if (h==t)
{
int xx=t1-h1+;
if (t1-h1+>=) ans+=1ll*cnt*(cnt-)/*js(xx);
ans+=1ll*ans2*cnt*(cnt-)/*(t1-h1+)*(t1-h1)/;
break;
}
if (h-h1>=&&t1-t>=)
{
ans+=1ll*cnt*(cnt-)/*(h-h1)*(h-h1+)/*(t1-t)*(t1-t+)/;
}
ans+=1ll*cnt*(cnt-)/*ans2*(t1-t+)*(h-h1+);
ans2+=(t1-t+)*(h-h1+);
h++;
}
}
if (cnt>=)
{
rg ll ans2=1ll*cnt*(cnt-)*(cnt-)/;
unsigned rg ll ans4=;
for (rg int i=;i<=n;i++)
{
if (a[now]>a[i])
{
int x=find1(a[now]-a[i]);
int y=find2(i,a[now]-a[i]);
ans4+=1ll*(x-y)*ans2;
}
}
ans3+=ans4/;
}
}
//ans3/=3;
cout<<ans+ans3<<endl;
return ;
}

对拍 n^6

#include <bits/stdc++.h>
using namespace std;
#define rg register
#define N 10000
#define rep(i,x,y) for (rg int i=x;i<=y;i++)
int b[];
bool cmp(int x,int y)
{
return(x<y);
}
int a[N],n;
bool pd1(int x1,int x2,int x3,int x4,int x5,int x6)
{
b[]=a[x1],b[]=a[x2],b[]=a[x3],b[]=a[x4],b[]=a[x5],b[]=a[x6];
sort(b+,b++,cmp);
if (b[]+b[]==b[]+b[]&&b[]+b[]==b[]&&b[]==b[])
return(); else return();
}
bool pd2(int x1,int x2,int x3,int x4,int x5,int x6)
{
b[]=a[x1],b[]=a[x2],b[]=a[x3],b[]=a[x4],b[]=a[x5],b[]=a[x6];
sort(b+,b++,cmp);
if (b[]+b[]+b[]==b[]&&b[]==b[]&&b[]==b[])
return(); else return();
}
int main()
{
freopen("noi.in","r",stdin);
freopen("noi2.out","w",stdout);
std::ios::sync_with_stdio(false);
cin>>n;
for (int i=;i<=n;i++) cin>>a[i];
int cnt=,cnt2=;
rep(i1,,n)
rep(i2,i1+,n)
rep(i3,i2+,n)
rep(i4,i3+,n)
rep(i5,i4+,n)
rep(i6,i5+,n)
if (pd1(i1,i2,i3,i4,i5,i6))
{ cnt++;
}
rep(i1,,n)
rep(i2,i1+,n)
rep(i3,i2+,n)
rep(i4,i3+,n)
rep(i5,i4+,n)
rep(i6,i5+,n)
if (pd2(i1,i2,i3,i4,i5,i6))
{
// cout<<i1<<" "<<i2<<" "<<i3<<" "<<i4<<" "<<i5<<" "<<i6<<endl;
cnt++;
}
cout<<cnt+cnt2<<endl;
return ;
}

【BZOJ4927】第一题 双指针+DP的更多相关文章

  1. 【BZOJ4927】第一题 双指针+DP(容斥?)

    [BZOJ4927]第一题 Description 给定n根直的木棍,要从中选出6根木棍,满足:能用这6根木棍拼 出一个正方形.注意木棍不能弯折.问方案数. 正方形:四条边都相等.四个角都是直角的四边 ...

  2. 【2019多校第一场补题 / HDU6578】2019多校第一场A题1001Blank——dp

    HDU6578链接 题意 有一串字符串,仅由 {0,1,2,3}\{0, 1, 2, 3\}{0,1,2,3} 组成,长度为 nnn,同时满足 mmm 个条件.每个条件由三个整数组成:l.r.xl.r ...

  3. hdu 1520 Anniversary party(第一道树形dp)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1520 Anniversary party Time Limit: 2000/1000 MS (Java ...

  4. [算法 笔记]2014年去哪儿网 开发笔试(续)第一题BUG修正

    上一篇的blog地址为:http://www.cnblogs.com/life91/p/3313868.html 这几天又参加了一个家公司的笔试题,在最后的编程题中竟然出现了去哪儿网开发的第一题,也就 ...

  5. 《学习OpenCV》练习题第五章第一题ab

    这道题是载入一幅带有有趣纹理的图像并用不同的模板(窗口,核)大小做高斯模糊(高斯平滑),然后比较用5*5大小的窗口平滑图像两次和用11*11大小的窗口平滑图像一次是否接近相同. 先说下我的做法,a部分 ...

  6. 《学习OpenCV》练习题第四章第一题b&c

    #include <highgui.h> #include <cv.h> #pragma comment (lib,"opencv_calib3d231d.lib&q ...

  7. 《学习OpenCV》练习题第四章第一题a

    #include <highgui.h> #include <cv.h> #pragma comment (lib,"opencv_calib3d231d.lib&q ...

  8. Google Code Jam 第一题

    通过的第一题,留做纪念,呵呵,非常简单,Africa 2010, Qualification Round: Store Credit. #include <stdio.h> #includ ...

  9. 图论测试题(一)第一题:longest

    第一题:longest 乌托邦有n个城市,某些城市之间有公路连接.任意两个城市都可以通过公路直接或者间接到达,并且任意两个城市之间有且仅有一条路径(What does this imply? A tr ...

随机推荐

  1. Linux 命令详解(二)awk 命令

    AWK是一种处理文本文件的语言,是一个强大的文本分析工具.之所以叫AWK是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的Fami ...

  2. crosstab(unknown, unknown) does not exist

    在pgadminIII用到交叉表时,给报了函数不存在 解决方法: 执行sql CREATE EXTENSION tablefunc; 结果 Query returned successfully wi ...

  3. Bootstrap -- 文件上传插件File Input的使用

    BootstrapFileInput下载参考:http://www.jq22.com/jquery-info5231 网友经验参见:http://www.cnblogs.com/wuhuacong/p ...

  4. IT阅读——关于“业务”

    本文转自http://www.cnblogs.com/beijiguangyong/archive/2012/11/12/2767054.html 开发当中常常听说“业务”这个词,什么“业务为王”之类 ...

  5. 使用sqlmap中tamper脚本绕过waf

    使用sqlmap中tamper脚本绕过waf 刘海哥 · 2015/02/02 11:26 0x00 背景 sqlmap中的tamper脚本来对目标进行更高效的攻击. 由于乌云知识库少了sqlmap- ...

  6. 3D点云数据分析:pointNet++论文分析及阅读笔记

    PointNet的缺点: PointNet不捕获由度量空间点引起的局部结构,限制了它识别细粒度图案和泛化到复杂场景的能力. 利用度量空间距离,我们的网络能够通过增加上下文尺度来学习局部特征. 点集通常 ...

  7. 重新看halcon模板匹配

    工业中模板匹配有很多需求. 代码如下: read_image (Image, 'J:/测试图片/test1/1.bmp') get_image_size (Image, Width, Height) ...

  8. JavaScript中 this 的指向

    很多人都会被JavaScript中this的指向(也就是函数在调用时的调用上下文)弄晕,这里做一下总结: 首先,顶层的this指向全局对象. 函数中的this按照调用方法的不同,其指向也不同: 1.函 ...

  9. SCons: 替代 make 和 makefile 及 javac 的极好用的c、c++、java 构建工具

    http://scons.org/ https://www.ibm.com/developerworks/cn/linux/l-cn-scons/index.html 后附:另外,WAF是一个基于sc ...

  10. spring aop的五种通知类型

    昨天在腾讯课堂看springboot的视频,老师随口提问,尼玛竟然回答错了.特此记录! 问题: Spring web项目如果程序启动时出现异常,调用的是aop中哪类通知? 正确答案是: 异常返回通知. ...