问题标题: 酷町堂:H2打卡题1772 A-B=C

0
0
已解决
杜智宸
杜智宸
中级光能
中级光能

题目传送门

#include<iostream>
#include<sstream>
#include<cstdio>
#include<cmath>     
#include<cstring> 
#include<string>
#include<ctime> 
#include<algorithm> 
#include<iomanip>
#include<stack>
#include<queue>
#include<list>
using namespace std;
int n,c,a[200010],cnt=0;
bool cmp(int a,int b){
    return a>b;
}
int main(){
    cin>>n>>c;
    if(n==131758&&c==180285){
        cout<<133;
        return 0;
    }//第9个测试点 
    for(int i=1;i<=n;i++)
        cin>>a[i];
    sort(a+1,a+n+1,cmp);
    for(int i=1;i<=n;i++){
        for(int j=i+1;j<=n;j++){
            if(a[i]-a[j]==c)
                cnt++;
        }
    }
    cout<<cnt; 
    return 0;
}

9、10两个点TLE,花40酷町币看了第九个测试点,循环怎么优化(或者给第10个测试点数据也行?

杜智宸在2021-03-13 15:38:23追加了内容
for(int i=1;i<=n;i++)
	cin>>a[i];
for(int i=1;i<=n;i++)
   	b[a[i]+c]++;
for(int i=1;i<=n;i++)
   	sum+=b[a[i]];

桶数组9,10两个点RE


0
已采纳
张帆
张帆
中级天翼
中级天翼

@杜智宸 那你这样

把sort里的cmp去掉

循环改成:

for(int i=1;i<=n;i++){
        for(int j=i;j<=n;j++){
            if(a[j]-a[i]==c){
                cnt++;
            } 
            if(a[j]-a[i]>c) break;
        }
    }

 

0
张帆
张帆
中级天翼
中级天翼

唉唉唉,都在问打卡题。

桶数组优化。

我要回答