zoukankan      html  css  js  c++  java
  • CF988E Solution

    题目链接

    题解

    可以发现结尾只得为(00,25,50,75),因此枚举这些数字将其放至结尾即可。若将(n)由右至左从(1)开始编号,将数字(a_i)移至末尾所需操作数为(i-1)。此外,若数对(00,25,50,75)的顺序是正确的,操作数须(-1);若存在前缀0,需要增加前缀0个数的操作数。设(n)数位数为(d),时间复杂度为(O(d^3))

    AC代码

    #include<bits/stdc++.h>
    #define int long long
    using namespace std;
    const int inf=0x3f3f3f3f3f3f3f3f;
    int a[20];
    bool check(int i,int j)
    {
    	return ((a[i]==7 && a[j]==5) || (a[i]==5 && !a[j]) || (!a[i] && !a[j]) || (a[i]==2 && a[j]==5));
    }
    signed main()
    {
    	int n,cnt=0,ans=inf;
    	scanf("%lld",&n);
    	while(n) {a[++cnt]=n%10; n/=10;}
    	for(int i=1;i<=cnt;i++)
    	{
    		for(int j=i+1;j<=cnt;j++)
    		{
    			if(check(i,j) || check(j,i)) 
    			{
    				int tmp=i-1+j-1,ti=a[i],tj=a[j],pos=cnt,num=0;
    				tmp-=check(j,i);
    				a[i]=0,a[j]=0;//a[i],a[j]无法阻止前缀0的脚步
    				while(!a[pos] && pos)
    				{
    					if(pos!=i && pos!=j) num++;//但它们不在前缀0的队伍中
    					pos--;
    				}
    				tmp+=num; a[i]=ti,a[j]=tj;
    				ans=min(ans,tmp);
    			}
    		} 
    	}
    	if(ans==inf) printf("-1");
    	else printf("%lld",ans);
    	return 0;
    }
    
  • 相关阅读:
    计算公式以及参数数量计算
    sqlmap查找SQL注入漏洞入门
    动态密码卡TOTP算法
    使用windbg分析iis崩溃的一个实例
    windbg加载sos.dll
    wndbg下载与安装
    windbg入门
    IIS崩溃时自动抓取Dump
    net组件转化成COM组件
    dokuwiki安装部署
  • 原文地址:https://www.cnblogs.com/violetholmes/p/14607384.html
Copyright © 2011-2022 走看看