问题标题: 酷町堂:1772 A-B=c 为什么80分?

0
0
已解决
于子轩
于子轩
初级守护
初级守护

章节
题库
排名
作业
考试
网络课
商城

搜索题库
于子轩  (酷町币:122) 
1772   A - B = C
Time Limit Exceeded:80分
于子轩的测评结果:
测试点#1   测评结果 : Accepted 时间 : 0ms    
测试点#2   测评结果 : Accepted 时间 : 4ms    
测试点#3   测评结果 : Accepted 时间 : 4ms    
测试点#4   测评结果 : Accepted 时间 : 0ms    
测试点#5   测评结果 : Accepted 时间 : 4ms    
测试点#6   测评结果 : Accepted 时间 : 8ms    
测试点#7   测评结果 : Accepted 时间 : 0ms    
测试点#8   测评结果 : Accepted 时间 : 4ms    
测试点#9   测评结果 : Time Limit Exceeded  时间 : 1992ms 偷看一下数据
测试点#10  测评结果 : Time Limit Exceeded  时间 : 1996ms 偷看一下数据
我的提交(cpp):
#include <iostream>
using namespace std;
void How_many(int a[],int n,int c)
{
    int count=0;
    for(int i=1;i<=n-1;i++)
    {
        for(int j=i+1;j<=n;j++)
        {
            if(a[i]-a[j]==c)
                count++;
            else if(a[j]-a[i]==c)
                count++;
        }
    }
    cout<<count;
}
int main()
{
    int a[200010],n,c;
    cin>>n>>c;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
    }
    How_many(a,n,c);
    return 0;
}

测试点#9测评结果 : Time Limit Exceeded时间 : 1992ms偷看一下数据

测试点#10测评结果 : Time Limit Exceeded时间 : 1996ms偷看一下数据


0
已采纳
王星河
王星河
资深光能
资深光能
以下是定义:
long long ans;
map<int,int> a;
int n,c,num[200005];

以下是处理:

    for(int i=1;i<=n;i++){
        scanf("%d",num+i);
        a[num[i]]++;
    }
    for(int i=1;i<=n;i++) ans+=a[num[i]+c];

(我没有发布整段代码)

王星河在2018-01-31 21:21:15追加了内容

另外输入输出要改成 scanf() 和 printf() 。

0
梁锦程
梁锦程
高级光能
高级光能
int n,c,a[200001],b[10000000];
输入。。。
for(i=1;i<=n;i++)
    b[a[i]+c]++;
for(i=1;i<=n;i++)
    num+=b[a[i]];
cout<<num;

 

0
0
0
陆麟瑞
陆麟瑞
资深天翼
资深天翼

要用map滚动数组!!!

 for(int i=1; i<=n; i++)
    {
        cin>>a[i];
        b[a[i]]++;
    }
    for(int i=1; i<=n; i++)
    if(b[a[i]+m])
    {
        s+=b[a[i]+m];
    }

b的定义:

map<int,int>b;

头文件

#include <bits/stdc++.h>
0
储金洋
储金洋
新手光能
新手光能

把你的循环优化一下,要不然超时过不了

0
0
臧启亚
臧启亚
初级光能
初级光能

超时了,最好改善一下程序,二重循环过不了

0
樊澄宇
樊澄宇
新手光能
新手光能

你超时了

这题的数据范围大,双重循环过不了。

我要回答