鄙人不才,此中鄙陋甚多,望海涵!!!
说实话,这个题目简直是神奇,开2个vector就会超时,只能在第二次读入的时候边读入处理数据!
最想不明白的是,为什么map也会超时呢?(unordered_map也会超时),希望解答!!!拜托了
一肚子气,大家直接看代码吧!一看就懂!主要是不明白自己的为什么满分不了!
注意双指针算法运用!
vector写法,顺带一提这个快一点!
#include<iostream>
#include<vector>
using namespace std;
typedef long long LL;
vector<pair<int, int>> v;
LL sum;
int main()
{
LL n,a,b,x,y;
cin>>n>>a>>b;
for (int i=0;i<a;i++)
{
scanf("%lld%lld",&x,&y);
v.push_back({x,y});
}
for (int i=0,j=0;j<b;j++)
{
scanf("%lld%lld",&x,&y);
while(i<a)
{
if(x<v[i].first) break;
else if(x>v[i].first) i++;
else
{
sum+=y*v[i].second;
i++;
break;
}
}
}
cout<< sum <<endl;
return 0;
}
1个pair写法
#include<iostream>
using namespace std;
typedef long long LL;
const int N=1e6+10;
pair<LL,LL> a[N];
LL sum;
int main()
{
int n,u,v;
cin>>n>>u>>v;
LL x,y;
for(int i=1;i<=u;i++)
{
scanf("%lld%lld",&x,&y);
a[i]={x,y};
}
for(int i=1,j=1;i<=v;i++)
{
scanf("%lld%lld",&x,&y);
while(j<=u)
{
if(x<a[j].first) break;
else if(x>a[j].first) j++;
else
{
sum+=a[j].second*y;
j++;
break;
}
}
}
cout<< sum <<endl;
return 0;
}
2个pair
#include<iostream>
using namespace std;
typedef long long LL;
const int N=1e6+10;
pair<LL,LL> a[N],b[N];
int main()
{
int n,u,v;
cin>>n>>u>>v;
LL x,y;
for(int i=1;i<=u;i++)
{
scanf("%lld%lld",&x,&y);
a[i]={x,y};
}
for(int i=1;i<=v;i++)
{
scanf("%lld%lld",&x,&y);
b[i]={x,y};
}
LL sum=0;
for(int i=1,j=1;j<=v;j++)
{
while(i<=u)
{
if(b[j].first<a[i].first) break;
else if(b[j].first>a[i].first) i++;
else
{
sum+=a[i].second*b[j].second;
i++;
break;
}
}
}
cout<< sum <<endl;
return 0;
}
我感觉俩个pair哪个没必要写,还没一个pair的看的舒服
其实我觉得2个pair舒服!emmm
这题unordered_map+快读能过你敢信?
我之前用哈希超时了,然后发我一下代码!