Pagini recente » Cod sursa (job #1260211) | Cod sursa (job #1857863) | Cod sursa (job #559645) | Cod sursa (job #249853) | Cod sursa (job #1624058)
# include <fstream>
using namespace std;
ifstream fin("pscpld.in");
ofstream fout("pscpld.out");
const int MAX = 1000010;
typedef struct { int p, u, v; }sir;
char str[MAX];
int sol;
sir per(int a, int b, int c) {
sir X;
X.v = a;
X.p = b;
X.u = c;
return X;
}
void secventa(sir x) {
if (x.p < 0 || str[x.u] == 0 || str[x.p] != str[x.u])
return;
if (x.p == x.u) {
++sol;
return;
}
// cat timp elementul din stanga = elementul din dreapta si elementele fac parte din sir
while ((str[x.p] == str[x.u]) && (x.p >= 0 && str[x.u] != 0))
--x.p, ++x.u;
x.p++;
x.u--;
x.v = x.u - x.p + 1;
if (x.v == 0)
return;
++sol;
}
int main() {
fin.get(str, 1000010);
// O(n*n)
for (int i=0; str[i]; ++i) {
secventa(per(0, i, i)); // pozitie impara
secventa(per(0, i-1, i+1)); // pozitie impara
secventa(per(0, i-1, i)); // pozitie para
}
fout << sol;
return 0;
}