#2 TLE怎么破
  • 板块P1102 A-B 数对
  • 楼主saydown
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/12/9 11:54
  • 上次更新2024/12/9 19:12:36
查看原帖
#2 TLE怎么破
1260171
saydown楼主2024/12/9 11:54

想不到为什么会TLE,我这么做难道不比遍历每个arr[i]要遍历次数少么,对于相同的数字我的下一次循环直接都跳过了

#include <iostream>//输入输出流
#include <algorithm>//排序等函数,find函数
#include <cmath>//数学函数
#include <string>//string
#include <cstring>//memset函数
#include <map>//map
#include <vector>//可变数组vector
#include <iomanip>//输出流格式化
#include <unordered_set>//有顺序的Set
#include <queue>//队列,优先队列
#include <climits>//最大值定义
#include <regex>//正则表达式
using namespace std;
long long ans=0;
long long arr[200005]={0};
//1 1 2 3
/*
10 3
10 4 7 5 10 4 5 8 5 7
4 1
1 1 2 3
10 1
1 1 1 2 2 3 4 4 5 5
*/
int main(){
    long long N,C;
	cin>>N>>C;
	for(long long i=0;i<N;i++){
        scanf("%lld",&arr[i]);
	}
	sort(arr,arr+N);
    long long left=0,right=0,middle=0;
	while(right<=N-1){
        if(arr[left]==arr[right]){
            right++;
        }else{
            middle=right;
            while(arr[right]-arr[left]<C && right<N-1){
                right++;
            }
            if(arr[right]-arr[left]==C){
                long long index=right;
                while(arr[right]==arr[index]){
                    ans=ans+middle-left;
                    right++;
                }
                
            }
            left=middle;
            right=left;
        }
    }
	cout<<ans;
}
2024/12/9 11:54
加载中...