首页 > 其他分享 >C - One Time Swap

C - One Time Swap

时间:2024-03-18 09:00:47浏览次数:17  
标签:long combduplicate len switch Swap Time

C - One Time Swap

https://atcoder.jp/contests/abc345/tasks/abc345_c

 

思路

组合计数,

假设字符串中所有位置的字符都不相同,求所有位置字符交换的组合数

对于相同字符的位置, 任意两个位置交换不会改变字符串

所以计算所有这种无效贡献

注意最后对所有的无效贡献,需要保留一个,对应唯一的一个字符串

https://zenn.dev/testcampus/articles/d8f6f4cc760fa0

 

Code

string s;

int main()
{
    cin >>s;
    
    long long len = s.size();
    
    long long combtotal = (len*(len-1)) >> 1;
    
//    cout << "combtotal=" << combtotal << endl;
    
    long long cnt[26] = {0};

    bool duplicate = false;
    for(char one: s){
        cnt[one-'a']++;
        
        if (cnt[one-'a']>1){
            duplicate = true;
        }
    }

    long long combduplicate = 0;
    for(int i=0; i<26; i++){
        if (cnt[i] <=1){
            continue;
        }
        
        long long charcnt = cnt[i];
        long long combone = (charcnt*(charcnt-1)) >> 1;
        /*
        should not minus one here,
        because if two or more chars appears twice or more,
        even though every switch of one char only contribute once
        
        for example
        aa b cc
        aa switch and cc switch only count once.
        
        so every char counts 1 switch
        combduplicate = 2
        but you need to keep one after counting all chars
        
        combduplicate - 1
        */
//        combone--;
        
        combduplicate += combone;
    }

//    cout << "combduplicate=" << combduplicate << endl;

    if (!duplicate){
        cout << combtotal << endl;
    } else {
        long long ans = combtotal - (combduplicate - 1);
        
        cout << ans << endl;
    }

    return 0;
}

 

标签:long,combduplicate,len,switch,Swap,Time
From: https://www.cnblogs.com/lightsong/p/18079588

相关文章

  • chrome.tabs.sendMessage和chrome.runtime.sendMessage的用法及区别
    在Chrome扩展开发中,chrome.tabs.sendMessage和chrome.runtime.sendMessage是用于不同目的的消息发送API,它们的主要区别在于消息的目标对象和发送范围:chrome.tabs.sendMessage:用于在扩展内的不同页面之间发送消息。消息的目标对象是指定的标签页或标签页中的contentsc......
  • AT_abc345_c [ABC345C] One Time Swap 题解
    题目传送门解法对于\(S_{i}\),设\(num_{S_{i}}\)表示\(S_{i+1\simn}\)中\(S_{i}\)出现的次数,则\(S_{i}\)对答案产生的贡献为\(n-i-num_{S_{i}}\)。注意原串在存在两个相同的元素的时候,也要统计在内。代码#include<bits/stdc++.h>usingnamespacestd;#definell......
  • 时间序列预测的零样本学习是未来还是炒作:TimeGPT和TiDE的综合比较
    最近时间序列预测预测领域的最新进展受到了各个领域(包括文本、图像和语音)成功开发基础模型的影响,例如文本(如ChatGPT)、文本到图像(如Midjourney)和文本到语音(如ElevenLabs)。这些模型的广泛采用导致了像TimeGPT[1]这样的模型的出现,这些模型利用了类似于它们在文本、图像和语音方面获......
  • 利用 STM32 TIMER 触发 ADC 实现分组转换
    1、问题描述使用STM32G4系列芯片开发产品,用到其中一个ADC模块的多个通道,他希望使用TIMER来定时触发这几个通道的转换。不过他有两点疑惑。第一,他期望定时器触发这几个通道是每触发一次则只转换一个通道,这样依次触发转换,而不是触发一次就把几个通道都转换完结。他......
  • Druid连接池问题:discard long time none received connection.
    啊啊啊啊啊啊啊~~~我真的服了找bug找到发疯百度也找不到,gpt也问不到,最后就是我重新打开视频看着敲了一遍,最后发现......我**忘记加注解了(......
  • 【论文笔记合集】Transformers in Time Series A Survey综述总结
    本文作者:slience_me文章目录TransformersinTimeSeriesASurvey综述总结1Introduction2Transformer的组成PreliminariesoftheTransformer2.1VanillaTransformer2.2输入编码和位置编码InputEncodingandPositionalEncoding绝对位置编码AbsolutePosit......
  • OpenMP - runtime库函数
    常用函数。#include<iostream>#include<omp.h>#defineNUM_THREADS16usingnamespacestd;intmain(intargc,char*argv[]){omp_set_num_threads(NUM_THREADS);#pragmaompparallel{cout<<"threadnum:"<&......
  • 新版一键AI视频图片换脸神器来了!目前最强的AI视频换脸工具Swapface!
    大家好,我是程序员晓晓之前发过一款AI换脸工具,可惜部署门槛太高,有没有换头换脸的AI工具?今天晓晓就给你们安排到家!SwapfaceAI工具一键开箱包‍它使用先进的人工智能和计算机视觉技术,可以在几秒内为你的视频生成逼真的面部替换效果。无需任何复杂的参数设置,你只需要......
  • GEE C14 Aggregating Images for Time Series 聚合时间序列图像
    一、CHIRPS数据CHIRPS: theClimateHazardsGroupInfraRedPrecipitationwithStation,全称“气候危害群红外线降水与站点数据”,该数据可利用时间能够追溯到1981年,目前仍然在更新当中,主要用于研究人员分析特定空间在特定时间段内降雨量的变化趋势,从而广泛应用于干旱监测。CH......
  • 【rust】《处理报错could not execute `llvm-config` one or more times》
    报错信息couldnotexecute`llvm-config`oneormoretimes,iftheLLVM_CONFIG_PATHenvironmentvariableissettoafullpathtovalid`llvm-config`executableitwillbeusedtotrytofindaninstanceof`libclang`onyoursystem:"couldn'texec......