床睡得还不是很习惯,起晚了点. 12点开始训练(未吃饭),先打开cf逛一逛.
一 :C. Manipulating History(思维)链接 题意:一开始你有一个长度为1的字符串.第i次操作中,可以把 t 2 i − 1 t_{2i-1} t2i−1替换成 t 2 i t_{2i} t2i.然而现在给你的是一堆 t i t_i ti,和最终得到的字符串 S S S.问你最开始的字符串是哪个?保证这个答案是唯一的. 思路:非常重要的观察,一开始只有一个字母,我们也只需要找到这个字母就可以.让我们思考一下,我们需要把长度为1最开始的字符串逐个替换得到这个最终字符串S. s->S1->S2->…S 当S的长度为1时,又由于答案是唯一的,肯定是逐个字符替换,每个非答案的字母出现了偶数次,只有一个字母出现了奇数次.那个就是最终的答案(除了最后一个) 比如说长度为1,n=4 a b b c,c 那么答案就一定是a. a->b,b->c这样变化,然后最后的c会重复出现在n+1个 当S长度不是1的时候,情况是类似的.当某个字母中间需要替换(或者最后)时,它一定会导致偶数次的出现情况.又因为答案是唯一的,所以答案是出现次数为奇数次的字母. 代码:
#include
using namespace std;
const int maxn = 1e6+5;
const int INF = 1e9+7;
typedef long long ll;
typedef pair pii;
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int T;cin>>T;
while(T--){
int n;cin>>n;
map cnt;
for(int i=1;i>s;
for(auto x : s) cnt[x]++;
}
for(auto [x,y]:cnt){
if(y%2==1){
coutn>>k;
vector a(n+1,0);
ll sum=0;
for(int i=1;i>a[i],sum+=a[i];
if(n==k){
cout>k;
ll sum = 0;
vector a(n+1,0);
for(int i=1;i>a[i];sum+=a[i];
}
if(k>=n){
cout
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?