Editorial for VM 13 Bài 03 - RR


Remember to use this editorial only when stuck, and not to copy-paste code from it. Please be respectful to the problem author and editorialist.
Submitting an official solution before solving the problem yourself is a bannable offence.

Lưu ý: Các code mẫu dưới đây chỉ mang tính tham khảo và có thể không AC được bài tập này

Code mẫu của flashmt

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;

char s[1000100], x, y;
int d[256], n;
long long ans;

int main()
{
    gets(s);
    scanf(" %c%c", &x, &y);
    n = strlen(s);
    for (int i = 0; i < n; i++)
    {
        if (s[i] == y) ans += d[x];
        d[s[i]]++;
    }
    cout << ans << endl;
}

Code mẫu của happyboy99x

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {
    public static void main(String argv[]) throws Exception {
        BufferedReader inp = new BufferedReader(new InputStreamReader(System.in));
        String s = inp.readLine();
        String t = inp.readLine();
        int n = s.length(), now = 0;
        for(int i = 0; i < n; ++i)
            if(s.charAt(i) == t.charAt(1)) ++now;
        long res = 0;
        for(int i = 0; i < n; ++i) {
            if(s.charAt(i) == t.charAt(1)) --now;
            if(s.charAt(i) == t.charAt(0)) res += now;
        }
        System.out.println(res);
        inp.close();
    }
}

Code mẫu của ladpro98

uses crt;

var s:ansistring;
    i:longint;
    d,kq:int64;x,y:char;

begin
readln(s);readln(x,y);
if (s[1]=x) then d:=1 else d:=0;
kq:=0;
for i:=2 to length(s) do
        begin
        if (s[i]=y) then kq:=kq+d;
        if (s[i]=x) then inc(d);
        end;
write(kq);
end.

Code mẫu của RR

// Author: RR

#include <iostream>
#include <cstdio>
#include <sstream>
#include <fstream>
#include <iomanip>
#include <cstdlib>
#include <cstring>
#include <string>
#include <algorithm>
#include <vector>
#include <queue>
#include <stack>
#include <deque>
#include <set>
#include <map>
#include <ctime>
#include <cmath>

#define FOR(i,a,b) for(int i=(a),_b=(b); i <= _b; ++i)
#define FORD(i,a,b) for(int i=(a),_b=(b); i >= _b; --i)
#define REP(i,a) for(int i=0,_a=(a); i < _a; ++i)
using namespace std;

const int MN = 1000111;

int cnt[MN];
char s[MN];

int main() {
    while (gets(s)) {
        char a, b;
        scanf("%c%c", &a, &b);

        int l = strlen(s);
        REP(i,l) {
            if (i) cnt[i] = cnt[i-1];
            else cnt[i] = 0;

            if (s[i] == a) ++cnt[i];
        }

        long long res = 0;
        FORD(i,l-1,1) if (s[i] == b) {
            res += cnt[i-1];
        }
        cout << res << endl;
        break;
    }
    return 0;
}

Code mẫu của skyvn97

#include<cstdio>
#include<cstring>
#define MAX   1001001
typedef long long ll;
char s[MAX];
char a[2];
ll c[MAX];
int n;
ll r;
int main(void) {
    gets(s);
    gets(a);
    n=strlen(s);
    int i;
    c[n]=0;
    for (i=n-1;i>=0;i=i-1) {
        if (a[1]==s[i]) c[i]=c[i+1]+1;
        else c[i]=c[i+1];
    }
    r=0;
    for (i=0;i<n;i=i+1)
        if (s[i]==a[0]) r=r+c[i+1];
    printf("%lld",r);
    return 0;
}

Comments

Please read the guidelines before commenting.


There are no comments at the moment.