cf c(map套pair)
Posted goto_1600
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cf c(map套pair)相关的知识,希望对你有一定的参考价值。
题意:
给定个string,让你从1~i每个位置,求出来d和k比值相同的段。
思路:
用个map来记录约分后的数量,太妙了。没想到。刚好就是a,b约分完出现的次数。
// Problem: C. Diluc and Kaeya
// Contest: Codeforces - Codeforces Round #724 (Div. 2)
// URL: https://codeforces.com/contest/1536/problem/C
// Memory Limit: 256 MB
// Time Limit: 2000 ms
//
// Powered by CP Editor (https://cpeditor.org)
#include<bits/stdc++.h>
#define IL inline
#define x first
#define y second
typedef long long ll;
using namespace std;
const int N=500010;
int sum[N];
map<pair<int,int>,int>mp;
int sum2[N];
int solve(int a,int b)
{
int g=__gcd(a,b);
a/=g;
b/=g;
mp[{a,b}]++;
return mp[{a,b}];
}
int main()
{
ios::sync_with_stdio(0);
int t;
cin>>t;
while(t--)
{
mp.clear();
int n;
cin>>n;
string s;
cin>>s;
s=" "+s;
for(int i=1;i<=n;i++)
{
sum[i]=sum[i-1]+(s[i]=='D');
sum2[i]=sum2[i-1]+(s[i]=='K');
cout<<solve(sum[i],sum2[i])<<" ";
}
cout<<endl;
}
return 0;
}
以上是关于cf c(map套pair)的主要内容,如果未能解决你的问题,请参考以下文章
CF988 C. Equal Sumsmap+pair/hash/任选两个序列,两个序列都除去他们中的一个数,使的总和相同