ZJNU 1542 - 三角形(续)--中高级
2024-09-07 05:51:24
从小到大排序后
先固定一遍,另外两边递增查找
即固定 i,j=i+1,k=j+1
然后让k递增到 a[i]+a[j]<=a[k] 时
此时不能凑成一个三角形
答案增加 k-1-j 组
此时不需要重置 k=j+1
因为 j++ 后 a[j] 会变大
那么在 j~k 之间的所有木棍长度均能再次满足这种 ij 组合
此时只需要把前一个状态的 k 继续往后查找即可
如果 k 查找到了最后,因为i固定,可得 j 不断向后移动,最后能增加的组合有 (n-j)*(n-j-1)/2 组,结束 j 循环,i++
#include<iostream>
#include<algorithm>
using namespace std;
int ar[];
int main()
{
ios::sync_with_stdio();
cin.tie();cout.tie();
int T,n,i,j,k,ans,d;
cin>>T;
while(T--)
{
cin>>n;
for(i=;i<=n;i++)
cin>>ar[i];
sort(ar+,ar+n+);
ans=;
for(i=;i<=n-;i++)
{
k=i+;
for(j=i+;j<=n-;j++)
{
d=ar[i]+ar[j];
while(k<=n&&d>ar[k])
k++;
ans+=k--j;
if(k>n)
{
ans+=(n-j)*(n-j-)/;
break;
}
}
}
cout<<ans<<endl;
} return ;
}
最新文章
- Greenplum 源码安装教程 —— 以 CentOS 平台为例
- 删除html元素
- Oracle 11g Express
- python模块xlrd安装-处理excel文件必须
- EF6+MYSQL之初体验
- ERP PowerDesigner工具使用(二)
- window7资源管理器一直重启(百度知道找到可用)
- 在VS2008环境下的C++异常处理
- try、catch、finally的使用分析---与 return 相关
- 关于自己的ES6使用姿势
- AFNetworking3.0出现Error Domain=com.alamofire.error.serialization.response Code=-1016 ";Request failed: unacceptable
- 常用CSS HACK
- hdu 5282 Senior&;#39;s String 两次dp
- 通过HttpClient来调用Web Api接口,实体参数的传递
- paramiko socket.error: Int or String expected
- CodeForces 696A Lorenzo Von Matterhorn (LCA + map)
- Andrew Ng机器学习课程笔记--week1(机器学习介绍及线性回归)
- eclipse如何把多个项目用不同的文件夹分隔开
- [C#]使用dnSpy对目标程序(EXE或DLL)进行反编译修改并编译运行
- 【LOJ】#2071. 「JSOI2016」最佳团体