T1:

  题意:给你一个环,从‘a'-->'b'--->'c'--->....--->'z'---'a'

     然后开始于’a',给你一串字符,求从‘a'开始一直依次走字符要走多少步

  题解:模拟

T2:

  题意:给你n个数字,你可以给这个数字-2(无数个)或者自己-1,自己后面一个数-1,问是否能全部为0;

  题解:模拟

T3:  

  题意:给你一些袜子,每个袜子有自己的颜色,然后给你很多对(x-y)希望将(x-y)染成同一种颜色,求最小染色步数

  题解:并查集+线段树

T4:

  题意:给你一些字符串,然后给你一种移动规则:移动一步,每个字符%m+1; 求最小移动步数使得字符串大小按字典序排序

  题解:将一些不和法区间弄出来用线段树或者差分维护即可

T5:  

  题意:两个人轮流按某个规则取数(从左向右取数字可以取【2--n】个,获得权值为数字和,同时取完后在最左边加一个权值为数字和的数

     希望先手-后手的差最大[两个人绝顶聪明]

  题解:设一个dp[i]表示从i--n中开始先手先取的最大差值

     dp[i]=max(sum[j]-dp[j]) i+1<=j<=n 

     于是考虑从后往前做可将时间优化为O[n]的 

T6  

  题意:给你一些数字,你可以选择其中一个不动的数字X,其他数字可以删减使得所有数为X的倍数,求所有数字之和的最大值!

  题解:考虑一个数一定在X*(j-1)和X*(j)之中,因为不能+所以一定会变为X*(j-1)所以我只需要知道X*(J-1)--X*j中有多少个数字存在原数列中

     时间复杂度为n*log(maxn) 可能重复出现某个数字,于是我们用vis记录一下即可!

代码集合: 

 

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<cstdio>
using namespace std;
char s[105];
int n;
int read()
{
    int x=0,f=1; char ch;
    while (ch=getchar(),ch<'0'||ch>'9') if (ch=='-') f=-1;
    while (x=x*10+ch-'0',ch=getchar(),ch>='0'&&ch<='9');
    return x*f;
}
int main()
{
    scanf("%s",s+1); n=strlen(s+1);
    char p='a'; int ans=0;
    for (int i=1; i<=n; i++)
    {
        ans+=min(abs(s[i]-p),26-abs(p-s[i])); p=s[i];
    }
    cout<<ans<<endl;
    return 0;
}
A

相关文章:

  • 2021-04-24
  • 2021-12-04
  • 2021-11-19
  • 2021-04-27
  • 2021-08-14
  • 2021-08-20
  • 2021-06-21
猜你喜欢
  • 2022-12-23
  • 2021-08-18
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-11-17
  • 2021-08-12
相关资源
相似解决方案