VT13 - Cặp đôi hoàn hảo (phiên bản 1)

View as PDF

Submit solution

Points: 1.00 (partial)
Time limit: 1.0s
Memory limit: 256M

Author:
Problem type
Allowed languages
C, C#, C++, Go, Java, Pascal, Perl, PHP, Python, Ruby, Rust, Scratch, Swift

Cho mảng số nguyên ~A~ có ~n~ phần tử, hãy tìm 2 phần tử lân cận trong mảng sao cho tổng của chúng là lớn nhất. Giả sử phần tử cuối cùng và phần tử đầu tiên cũng có tính lân cận (tạo thành vòng tròn khép kín)

Input

  • Dòng 1 là số lượng phần tử của mảng ~n~
  • Dòng tiếp theo là ~n~ số nguyên tương ứng là các phần tử của mảng

Giới hạn:

  • ~n \in N^*~ và  ~2 \le n \le 10^4~
  • ~|A_{i}| \le 10^8~

Output

In ra 2 phần tử lân cận nhau (cách nhau bởi 1 dấu cách) thỏa mãn yêu cầu đề bài.

Lưu ý:

  • Giữ nguyên thứ tự ban đầu của chúng
  • Nếu có nhiều kết quả, in ra kết quả ở chỉ số mảng (của phần tử đầu tiên) lớn hơn
  • Nếu phần tử cuối cùng và phần tử đầu tiên là cặp có tổng lớn nhất, in phần tử cuối cùng trước (Xem sample #1).

Sample

Input #1
5
3 2 -1 2 4
Output #1
4 3
Input #2
6
1 2 6 1 6 2
Output #2
6 2

Comments

Please read the guidelines before commenting.



  • 0
    dailongdza  commented on Feb. 18, 2024, 1:25 p.m.

    n=int(input()) a=input().split() a=list(map(int, a)) a=a+[a[0]] day=[] tong=0 for i in range(len(a)-1): day.append(a[i]+a[i+1]) d=max(day) m1=0 idex=[] day1=[] for i in range(len(a)-1): if d==a[i]+a[i+1]: idex.append(i) day1.append(a[i]) for i in idex: if max(day1)==a[i]: print(a[i],a[i+1]) python 3 cho bạn nào cần


  • 0
    thangok  commented on Feb. 12, 2024, 12:17 p.m.

    Quá dễ ae ơi!

    include<bits/stdc++.h>

    using namespace std; int main() { int n; cin>>n; int a[n]; for(int i=0;i<n;i++){ cin>>a[i]; } int x=a[0]+a[n-1]; int y=a[0]; int z=a[n-1]; for(int i=1;i<n-1;i++) { if(x<a[i]+a[i+1]) { x=a[i]+a[i+1]; y=a[i]; z=a[i+1]; } } if(x==a[0]+a[n-1]) cout<<z<<" "<<y; else cout<<y<<" "<<z; return 0; }


  • 0
    Tuankiet2004  commented on Jan. 31, 2024, 2:53 a.m.

    mn hạn chế part code đi nếu ai hỏi bài chỉ ý tưởng cho ngta để họ suy nghỉ chơ đừng part code cứ sao chép nộp vào đó cũng là bài của họ thôi chơ không phải của mình .Thank mình góp ý vậy.


    • 1
      ZeroNNT17  commented on Feb. 5, 2024, 1:52 p.m.

      Tùy người thôi ông cũng có người xem code để tham khảo ý tưởng cũng có người lười thì chép luôn của người khác


  • -6
    zntp810__  commented on Jan. 31, 2024, 2:36 a.m.

    This comment is hidden due to too much negative feedback. Show it anyway.


  • 0
    Vuer  commented on Jan. 20, 2024, 4:48 a.m.

    include<stdio.h>

    include<math.h>

    int main(){ int n; scanf("%d", &n); int a[n]; for(int i=0; i<n; i++){ scanf("%d", &a[i]); } int max=-2*pow(10,8); if((a[0]+a[n-1])>max) max=(a[0]+a[n-1]); for(int i=0; i<n-1; i++){ if((a[i]+a[i+1])>max) max=(a[i]+a[i+1]); } int b, c; for(int i=0; i<n-1; i++){ for(int j=i+1; j<n; j++){ if((a[i]+a[j])==max){ b=a[i]; c=a[j]; } } } if(max==(a[0]+a[n-1])){ b=a[n-1]; c=a[0]; } printf("%d %d", b, c); }


  • -1
    KhoiMinh  commented on Jan. 10, 2024, 3:53 a.m.

    code c++ đây

    include <iostream>

    using namespace std; int main() { int n,k,x,y; cin>>n>>k; long long max=0,v1,v2; for (int i=1; i<n; ++i) { cin>>y; if (x+y>=max) { max=x+y; v1=x; v2=y; } if (i==n-1) { if (y+k>=max) { max=y+k; v1=y; v2=k; } } x=y; } cout<<v1<<" "<<v2; }


  • 1
    kitajima2910  commented on Dec. 29, 2023, 11:25 a.m.

    Java 8+ đã AC chào các đạo hữu, thấy hay thì xin up vote ạ <3

    import java.util.ArrayList;
    import java.util.List;
    import java.util.Scanner;
    
    /**
     *
     * @author Kitajima2910
     */
    public class VT13 {
    
        public static void main(String[] args) {
    
            Scanner sc = new Scanner(System.in);
            int n = sc.nextInt();
    
            List<Integer> store = new ArrayList<>();
    
            // Thêm data vào trước
            for(int i = 1; i <= n; i++) {
                store.add(sc.nextInt());
            }
    
            // Tạo biến max để lưu
            int max = store.get(0) + store.get(1);
    
            // Tạo biến lưu index
            int index = 0;
    
            // Duyệt mảng và xử lý thuật toán
            for(int i = 1; i < n - 1; i++) {
    
                int sum = store.get(i) + store.get(i + 1);
    
                // Kiểm tra với biến max
                if(sum > max) {
                    max = sum;
                    index = i;
                }
            }
    
            // Kiểm tra 2 số đầu cuối
            int sum = store.get(0) + store.get(n - 1);
            if(sum > max) {
                System.out.println(store.get(n - 1) + " " + store.get(0));
            } else {
                System.out.println(store.get(index) + " " + store.get(index + 1));
            }
    
        }
    
    }
    

  • 0
    sayop_0209  commented on Dec. 15, 2023, 5:49 p.m.

    Cho em xin test case số 1 với ạk


  • 0
    donguyenphuonganh  commented on Dec. 15, 2023, 10:58 a.m.

    dạ tại sao em không thể submit bằng C# vậy nhỉ, đa số bài nào cũng kh nộp được


    • 0
      thanhqt74  commented on Dec. 17, 2023, 2:45 p.m.

      Bạn xem bên allowed languages kìa


  • -2
    baotphcm1612  commented on Nov. 23, 2023, 6:25 p.m.

    include <iostream>

    #include <cmath>

    int main() { int size; std::cin >> size; long int* number = new long int[size]; for (int i = 0; i < size; i++) { std::cin >> number[i]; } long int a = 0, b = 0; bool manyresult = false; int max = *number + *(number + 1); for (int i = 1; i < size; i++) { if (i < size - 1) { if (max == number[i] + number[i + 1]) { manyresult = true; break; } if (max < number[i] + number[i + 1]) { max = number[i] + number[i + 1]; a = number[i]; b = number[i + 1]; } } else { if (max == number[i] + number[0]) { manyresult = true; } if (max < number[i] + number[0]) { max = number[i] + number[0]; a = number[i]; b = number[0]; } } } if (manyresult) { std::cout << fmax(a, b) << " " << fmin(a, b) << std::endl; } else std::cout << a << " " << b << std::endl; delete[] number; return 0; }


  • -3
    nightfury1409  commented on Aug. 31, 2023, 12:20 a.m.

    cùng một thuật toán mà c++ lại được mà c# lại không được là như thế nào vậy ạ?

    code c++ :

    include<bits/stdc++.h>

    using namespace std; int main(){ int n;cin>>n; int a[n]; for(int i=0;i<n;i++) cin>>a[i]; int max=a[0]+a[1]; int c=0; for(int i=0;i<n-1;i++){ if(a[i]+a[i+1]>=max) { max=a[i]+a[i+1]; c=i; } } if(a[n-1]+a[0]>max) cout<<a[n-1]<<" "<<a[0]; else cout<<a[c]<<" "<<a[c+1];
    }

    code c#(ko pass):

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;

    namespace mang4 { class Program {

        static void Main(string[] args)
        {
            int a = int.Parse(Console.ReadLine());
            string s = Console.ReadLine();
            string[] arrstr = s.Split(' ');
            int[] arr=new int[a];
            for(int i = 0; i < a; i++)
            {
                arr[i] = Convert.ToInt32(arrstr[i]);
            }
            int max = arr[0] + arr[1];
            int c1 = 0;
            for(int i = 0; i < a - 1; i++)
            {
                if (arr[i] + arr[i + 1] >= max) max = arr[i] + arr[i + 1];
                c1=i;
            }
            if (arr[a - 1] + arr[0] > max) Console.WriteLine( arr[a-1]+ " " +arr[0]);
            else
            {
                Console.WriteLine(arr[c1] + " " + arr[c1+1]);
            }
    
            Console.ReadLine();
        }
    }
    

    }