CSES - Bittiparit Annettuna on bittijono, jossa jokainen merkki on $0$ tai $1$. Tehtäväsi on laskea summa kaikista bittiparien etäisyyksistä, joissa kumpikin bitti on $1$.

Esimerkiksi kun bittijono on $10110$, etäisyydet ovat seuraavat:
  • $\underline{1}0\underline{1}10$ (etäisyys $2$)
  • $\underline{1}01\underline{1}0$ (etäisyys $3$)
  • $10\underline{1}\underline{1}0$ (etäisyys $1$)
Etäisyyksien summa on siis $2+3+1=6$.

Voit olettaa, että bittijonon pituus on enintään $10^5$. Tavoitteena on, että algoritmin aikavaativuus on $O(n)$.

Python

Toteuta tiedostoon bitpairs.py funktio calculate, joka ilmoittaa etäisyyksien summan.
def calculate(s):
    # TODO

if __name__ == "__main__":
    print(calculate("10110")) # 6
    print(calculate("10")) # 0
    print(calculate("10010110")) # 20
    print(calculate("0011110111101010")) # 214
Java

Toteuta tiedostoon BitPairs.java metodi calculate, joka ilmoittaa etäisyyksien summan.
public class BitPairs {
    public long calculate(String s) {
        // TODO
    }

    public static void main(String[] args) {
        BitPairs b = new BitPairs();
        System.out.println(b.calculate("10110")); // 6
        System.out.println(b.calculate("10")); // 0
        System.out.println(b.calculate("10010110")); // 20
        System.out.println(b.calculate("0011110111101010")); // 214
    }
}