Một chuỗi X được gọi là chuỗi con của một chuỗi Y nếu X là một chuỗi các ký tự liên tiếp của Y. Cho một chuỗi số S, hãy tìm tổng các phần tử trong tất cả các chuỗi con có thể của chuỗi S. Giả sử S = “123” có các chuỗi con là “1”, “2”, “3”, ”12”, “23”, “123” thì tổng cần tìm là 1 + 2 + 3 + (1 + 2) + (2 + 3) + (1 + 2 + 3) = 20 Dữ liệu vào: Đọc ở file văn bản THUONG.INP một chuỗi S (S có độ dài không quá {10}^5). Dữ liệu ra: Ghi ra file văn bản THUONG.OUT một số duy nhất là tổng cần tìm.

2 câu trả lời

#include <iostream>
#include <queue>
using namespace std;

const int Lim = 1e5;
string s;
long long mul[Lim + 1], n, res;

int main() {
    cin >> s; n = s.size();
    for (int i = 1, r = n; r > 0; ++i, r -= 2) {
        mul[i] = mul[i - 1] + r;
        mul[n - i + 1] = mul[i];
    }
    
    for (int i = 0; i < n; ++i) res += (s[i] - '0') * mul[i + 1];
    cout << res;
}

uses crt;
var f:text; s:array[1..100000]of char; i,j,t,a,kq,n:longint;
begin
clrscr;
   assign(f,'THUONG.INP');reset(f);
      while not(eoln(f)) do
         begin
            inc(n);
            read(f,s[n]);
         end;
   close(f);
   assign(f,'THUONG.OUT');rewrite(f);
      for i:=1 to n do
         begin
            t:=0;
            for j:=i to n do
               begin
                  val(s[j],a);
                  t:=t+a;
                  kq:=kq+t;
               end;
         end;
      writeln(f,kq);
   close(f);
end.