zoukankan      html  css  js  c++  java
  • Codeforces 988E. Divisibility by 25

    解题思路:

    1. 只有尾数为25,50,75,00的数才可能是25的倍数。

    2. 对字符串做4次处理,以25为例。

      a. 将字符串中的最后一个5移到最后一位。计算交换次数。(如果没有找到5,则不可能凑出25,考虑50、75、00)
      b. 字符串已经改变,将此时最后一个2移到倒数第二位。计算交换次数。 (如果没有找到2,则也不可能凑出25,考虑50、75、00)
      c. 将除了最后两位之外的第一个非0的数字移到首位,计算交换次数。(如果找不到除了最后两位之外的非0数字,则不可能凑出25,考虑50、75、00)

    注意:

    我的WA点:

    输入25
    输出0

    代码:

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    
    int solve(string s, char c1, char c2){
    //	cout << s << endl;
    	int len = s.length()-1;
    	int ans = 0;
    	int flag = false;
    	for(int i = 0;s[i]; ++i){
    		if(s[i] == c2){
    			flag = true;
    			for(int j = i;j > 0; j--){
    				swap(s[j],s[j-1]);
    				ans++;
    			}
    			break;
    		}
    	}
    //	cout << ans << endl;
    	if(!flag) return -1;
    	flag = false;
    	for(int i = 1;s[i]; ++i){
    		if(s[i] == c1){
    			flag = true;
    			for(int j = i;j > 1; j--){
    				swap(s[j],s[j-1]);
    				ans++;
    			}
    			break;
    		}
    	}
    	if(!flag) return -1;
    	if(len == 1) return ans;
    	int con = -1;
    	for(int i = len;i > 1; --i){
    		if(s[i] != '0'){
    			con = i;
    			break;
    		}
    	}
    	if(con == -1){
    		return -1;
    	}else{
    		return ans+len-con;
    	}
    }
    
    int main(){
    	ios::sync_with_stdio(false);
    	string s;
    	while(cin >> s){
    		reverse(s.begin(), s.end());
    		int ans = INT_MAX;
    		int t;
    		t = solve(s, '2', '5');
    	//	cout << t << endl;
    		if(t != -1){
    			ans = min(ans, t);
    		}
    		t = solve(s, '5', '0');	//	cout << t << endl;
    		if(t != -1){
    			ans = min(ans, t);
    		}
    		t = solve(s, '7', '5');	//	cout << t << endl;
    		if(t != -1){
    			ans = min(ans, t);
    		}
    		t = solve(s, '0', '0');	//	cout << t << endl;
    		if(t != -1){
    			ans = min(ans, t);
    		}
    		if(ans == INT_MAX) ans = -1;
    		cout << ans << endl;
    	} 
        return 0;
    }
    
  • 相关阅读:
    C语言常用函数
    信号处理函数误用不可重入函数导致的进程死锁情况
    Shell脚本学习
    文件I/O详解
    字体标记的使用
    无序列表标记
    换行标记的使用
    HTML文件的基本结构
    预格式化标记的使用
    特殊标记的使用
  • 原文地址:https://www.cnblogs.com/zhangjiuding/p/9189127.html
Copyright © 2011-2022 走看看