Thứ Ba, 9 tháng 7, 2019

Cặp số CAPSO

Cho dãy n số nguyên dương a1, a2, …, an và số nguyên dương S. Hãy đếm xem có bao nhiêu cặp phần tử (ai, aj) (i <> j) thỏa mãn ai + aj = S.
Input:
· Dòng đầu là số nguyên dương n (n ≤ 106) và s (s ≤ 106)
· N dòng sau, dòng thứ i là số nguyên dương ai (ai≤ 106)
Output: số cặp (ai, aj) thỏa đề bài
Input      Output
5 4                3
1 3 1 2 2

21 nhận xét:

  1. Code C++ Subtask full O(N):
    #include

    using namespace std;

    int a[1000006];
    int n, s;
    long long res=0;

    int main() {
    freopen("inp.txt", "r", stdin);
    freopen("out.txt", "w", stdout);
    scanf("%d%d", &n, &s);
    for(int i=1; i<=n; i++) {
    int x;
    scanf("%d" ,&x);
    res+=a[s-x], a[x]++;
    }
    cout << res;
    return 0;
    }

    Trả lờiXóa
  2. program p;
    uses crt;
    var a:array[1..10] of integer;
    d,s,n,i:integer;
    begin
    clrscr;
    readln(n,s); d:=0;
    for i:=1 to n do readln(a[i]);
    for i:=1 to n do
    if a[i]+a[i+1]=s then inc(d);
    write(d);
    readln;
    end.

    Trả lờiXóa
  3. Uses crt;
    Var n,i,j,s,dem:longint;
    f,t:array[1..1000000] of longint;
    ds:array[1..1000000] of boolean;
    Begin
    readln(n);
    readln(s);
    For i:=1 to n do
    Begin
    readln(f[i]);
    t[f[i]]:=t[f[i]]+1;
    end;
    For i:=1 to n do
    If (t[f[i]]>0)and(t[s-f[i]]>0) then
    Begin
    ds[f[i]]:=true;
    ds[s-f[i]]:=true;
    end;
    For i:=1 to n do
    If (ds[f[i]]=true)and(ds[s-f[i]]=true)and(s-f[i]<>f[i]) then
    Begin
    dem:=dem+t[f[i]]*(t[s-f[i]]);
    t[f[i]]:=0;
    t[s-f[i]]:=0;
    end else If (s-f[i]=f[i]) then
    For j:=1 to t[f[i]]-1 do
    Begin
    dem:=dem+j;
    t[f[i]]:=0;
    end;
    Write(dem);
    readln;
    end.

    Trả lờiXóa
  4. code c++:

    #include
    #include
    using namespace std;
    void findpair(int arr[], int len, int sum)
    {
    sort(arr, arr+len);
    int i = 0;
    int j = len -1;
    while( i < j){
    while((arr[i] + arr[j]) <= sum && i < j)
    {
    if((arr[i] + arr[j]) == sum)
    cout << "(" << arr[i] << "," << arr[j] << ")" << endl;
    i++;
    }
    j--;
    while((arr[i] + arr[j]) >= sum && i < j)
    {
    if((arr[i] + arr[j]) == sum)
    cout << "(" << arr[i] << "," << arr[j] << ")" << endl;
    j--;
    }
    }
    }
    int main(void)
    {
    int arr [10] = {1,2,3,4,5,6,7,8,9,0};
    findpair(arr, 10, 7);
    }

    Trả lờiXóa
    Trả lời
    1. Cái này chỉ đúng với trường hợp các số trong dãy đôi một khác nhau. Chứ trùng nhau sẽ liệt kê ko hết

      Xóa
  5. #include
    using namespace std;
    #define ll long long
    int main()
    {
    ll n, i, s, j, dem=0, max=0, tong;
    cin >> n >> s;
    ll a[n];
    for (i = 0; i < n; i++)
    cin >> a[i];

    for (i = 0; i < n-1; i++)
    for (j = i+1; j < n; j++)
    if (a[i]+a[j]==s) dem++;

    cout<< dem;



    return 0;
    }

    Trả lờiXóa
  6. bọn này ngáo mẹ nó rồi

    Trả lờiXóa
    Trả lời
    1. đây là cách trâu bò, m ngu khác del gì

      Xóa

Dùng nick gmail để bình luận. Nếu lần đầu tiên bạn làm điều này thì hệ thống sẽ chuyển bạn sang trang blogger và hỏi bạn chọn tên hiển thị là gì. Bạn hãy nhập tên hiển thị rồi ok là được. Những lần bình luận sau hệ thống sẽ không hỏi nữa. Cảm ơn!

Bài được xem nhiều nhất