Codeforces 466C Number of Ways
来源:互联网 发布:淘宝客招募网站 编辑:程序博客网 时间:2024/06/05 08:44
#include <bits/stdc++.h>
using namespace std;
long long a[500010];
//标程上给的其实和我的想法差不多
//只不过是人家直接拿数组存起来了
//用后缀和的形式,而我采用时二分,其实都一样了
//但是另外有人给出的更巧妙,牛的一批
//首先进行转换一下,也就是说我现在考虑的不是单独一个元素
//而是前缀和,这在输入的时候就可以处理了,然后就不用考虑这个
//元素数组,而转而考虑这个前缀和数组
//只需遍历一次前缀和数组,找到其中和为s/3的个数和s*2/3的个数
//乘起来就是答案了
int main(void)
{
// freopen("in.txt","r",stdin);
vector<int>vb;
vector<int>vc;
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
long long sum=0;
long long n;
cin>>n;
for(long long i=0;i<n;++i)
{
cin>>a[i];
sum+=a[i];
}
if(n<3)
{
cout <<0<<endl;
return 0;
}
if(sum%3!=0)
{
cout <<0<<endl;
return 0;
}
else
{
long long sum1=0;
for(int i=0;i<n-2;++i)
{
sum1+=a[i];
if(sum1==sum/3)
{
vb.push_back(i);
}
}
if(vb.size()==0)
{
cout <<0<<endl;
return 0;
}
long long sum2=0;
for(int i=n-1;i>=2;i--)
{
sum2+=a[i];
if(sum2==sum/3)
{
vc.push_back(i);
}
}
if(vc.size()==0)
{
cout <<0<<endl;
return 0;
}
sort(vc.begin(),vc.end());
long long ans=0;
for(auto i:vb)
{
ans+=(vc.end()-(upper_bound(vc.begin(),vc.end(),i+1)));
}
cout <<ans<<endl;
}
return 0;
}
using namespace std;
long long a[500010];
//标程上给的其实和我的想法差不多
//只不过是人家直接拿数组存起来了
//用后缀和的形式,而我采用时二分,其实都一样了
//但是另外有人给出的更巧妙,牛的一批
//首先进行转换一下,也就是说我现在考虑的不是单独一个元素
//而是前缀和,这在输入的时候就可以处理了,然后就不用考虑这个
//元素数组,而转而考虑这个前缀和数组
//只需遍历一次前缀和数组,找到其中和为s/3的个数和s*2/3的个数
//乘起来就是答案了
int main(void)
{
// freopen("in.txt","r",stdin);
vector<int>vb;
vector<int>vc;
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
long long sum=0;
long long n;
cin>>n;
for(long long i=0;i<n;++i)
{
cin>>a[i];
sum+=a[i];
}
if(n<3)
{
cout <<0<<endl;
return 0;
}
if(sum%3!=0)
{
cout <<0<<endl;
return 0;
}
else
{
long long sum1=0;
for(int i=0;i<n-2;++i)
{
sum1+=a[i];
if(sum1==sum/3)
{
vb.push_back(i);
}
}
if(vb.size()==0)
{
cout <<0<<endl;
return 0;
}
long long sum2=0;
for(int i=n-1;i>=2;i--)
{
sum2+=a[i];
if(sum2==sum/3)
{
vc.push_back(i);
}
}
if(vc.size()==0)
{
cout <<0<<endl;
return 0;
}
sort(vc.begin(),vc.end());
long long ans=0;
for(auto i:vb)
{
ans+=(vc.end()-(upper_bound(vc.begin(),vc.end(),i+1)));
}
cout <<ans<<endl;
}
return 0;
}
阅读全文
0 0
- codeforces 466C C. Number of Ways
- codeforces 466C Number of Ways
- Codeforces 466 C. Number of Ways
- 【codeforces】 466C Number of Ways
- Codeforces 466C Number of Ways(高效)
- Number of Ways--CodeForces 466C 水题
- Codeforces 466C Number of Ways
- codeforces 466 C Number of Ways
- Codeforces 466C Number of Ways
- codeforces-466C-Number of Ways
- Codeforces-466C-Number of Ways
- Codeforces 466C Number of Ways 二分
- Codeforces 466C Number of Ways【思维】
- codeforces 466C Number of Ways
- Codeforces 466C Number of Ways
- 【CODEFORCES】 C. Number of Ways
- Problem - 466C - Codeforces C. Number of Ways
- CodeForces - 466C Number of Ways (前后缀和)
- PID学习笔记
- win10 显示下载 上传网速
- 爬虫——多线程糗事百科案例
- Spring @Autowired注解在非Controller中注入为null
- 编程从广义表字符串表示中直接获取广义表有关信息
- Codeforces 466C Number of Ways
- Linux 学习笔记_Linux服务管理(找到对应的文件)详解
- HashMap的实现原理和底层数据结构
- 产品经理的自我管理
- Python装饰器
- Linux 学习笔记_Linux网络管理_详解
- java基本数据类型长度
- 一个简单的K-近邻
- 使用观察者模式观察线程的生命周期