1 条题解
-
0
统计数量:
颜色不同:S[i], S[j], S[k] 互不相同。
位置不等差:j - i ≠ k - j(即三个位置不是等差数列)。
解题思路
条件1:先统计所有满足颜色互不相同的三元组。
条件2:从这些三元组中减去不满足位置条件(即 j - i = k - j)的数量。
具体步骤:
计算所有颜色互不相同的三元组总数。
计算其中不满足位置条件的三元组数量。
最终结果 = 总数 - 不满足位置条件的数量。
关键步骤
- 统计颜色互不相同的三元组,
减去颜色不满足的三元组数(即至少有两个字符相同的情况)。
- 统计不满足位置条件的三元组:
对于所有可能的 和 ( ),检查 ( ) 是否满足颜色互不相同。
这些三元组会被错误地包含在总数中,需要减去。
#include<bits/stdc++.h> using namespace std; typedef long long LL; typedef pair<LL, LL> PII; #define x first #define y second const int N = 2e5 + 10, M = 30; void solve() { int n; string s; cin >> n >> s; int r = 0, g = 0, b = 0; for(int i = 0; i < n; i ++) { if(s[i] == 'R') r ++; else if(s[i] == 'G') g ++; else b ++; } LL ans = r * g * (LL)b; for(int i = 0; i < n; i ++) for(int j = i + 1; j < n; j ++) { int k = j + j - i; if(k >= n) continue; if(s[i] != s[j] && s[j] != s[k] && s[k] != s[i]) ans --; } cout << ans << endl; } int main() { int t = 1; // cin >> t; while(t --) solve(); }
- 1
信息
- ID
- 533
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- (无)
- 递交数
- 10
- 已通过
- 3
- 上传者