CSES - Kahden summa

Annettuna on lista, jossa on nn lukua, sekä luku xx. Monellako tavalla voidaan muodostaa lukupari, jossa on kahdessa eri kohdassa listassa oleva luku ja jonka summa on enintään xx?

Voit olettaa, että nn on enintään 10510^5 ja jokainen listan luku ja xx on kokonaisluku välillä 11091 \dots 10^9. Tavoitteena on, että algoritmin aikavaativuus on O(nlogn)O(n \log n).

Python

Toteuta tiedostoon twosum.py funktio find, joka ilmoittaa lukuparien määrän.

def find(t,x):
    # TODO

if __name__ == "__main__":
    print(find([1,2,3],4)) # 2
    print(find([5,2,4,7],10)) # 4
    print(find([1,1,1,1],2)) # 6
    print(find([1,1,1,1],1)) # 0
    print(find([8,8,1,2,5,1,9,3],9)) # 14

Java

Toteuta tiedostoon TwoSum.java metodi find, joka ilmoittaa lukuparien määrän.

public class TwoSum {
    public long find(int[] t, int x) {
        // TODO
    }

    public static void main(String[] args) {
        TwoSum t = new TwoSum();
        System.out.println(t.find(new int[] {1,2,3}, 4)); // 2
        System.out.println(t.find(new int[] {5,2,4,7}, 10)); // 4
        System.out.println(t.find(new int[] {1,1,1,1}, 2)); // 6
        System.out.println(t.find(new int[] {1,1,1,1}, 1)); // 0
        System.out.println(t.find(new int[] {8,8,1,2,5,1,9,3}, 9)); // 14
    }
}