【CODEFORCES】Weird Rounding
CODEFORCEの問題を解いた.
http://codeforces.com/contest/779/problem/B
難しさ(初心者目線)
・考え方*
・実装*
・面白さ*
問題
コウタ君は数をで割るのが大好きです.
今日は整数nをで割ろうと思います.
コウタ君はnがで割り切れないと怒るので、
割り切れるようにいくつかの桁の数字を削除してあげてください.
削除すべき数の最小値を出力してください.
最上位の桁は0ではありません.
削除したら桁が1つ少なくなります.
例えば30020で十の位の2を削除したら3000になります.
削除する必要がない場合は0を出力してください.
入力
0≦n≦2 000 000 000(整数)
1≦k≦9(整数)
出力
最小値を出力
ヒント
コード
WhyamIhereさんのコード参考にしました.
#include <algorithm> #include <cstdio> #include <iostream> #include <map> #include <cmath> #include <queue> #include <set> #include <sstream> #include <stack> #include <string> #include <vector> #include <stdlib.h> #include <stdio.h> using namespace std; #define pb push_back #define mp make_pair #define ll long long #define PI acos(-1.0) #define ALL(A) ((A).begin(), (A).end()) #define vsort(v) sort(v.begin(),v.end()) #define FOR(I,A,B) for(int I = (A); I < (B); ++I) int main(){ //stringに格納した方が楽 string s; int k; cin >> s >> k; //0の数を数える int zero = 0; FOR(i, 0, s.length()){ if(s[i]=='0') zero++; } int dels = 0; //0の数が1の位から数えてkになると割り切れる if(k <= zero){ zero = 0; for(int i=s.length()-1; i>=0; --i){ if(s[i]=='0'){ zero++; }else{ dels++; } if(zero>=k) break; } cout << dels << endl; return 0; } //0にしないと割り切れない(0はどんな数字でも割り切れる) else{ cout << s.length()-1 << endl; return 0; } }
コメント
string使えばよかった.