BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / acm-icpc / #94145同步于 2017/10/14
该镜像源已超过 30 天没有更新,可能在源站已被删除。
ACM_ICPC机器人发帖

【问题】一道水题的求助

TTTAO1015
2017/10/14镜像同步15 回复
不知道这次又会是什么bug 哎。。我想不出来了,麻烦大神帮忙了 这个我写的可能有点混乱,我尽量加了注释。。。麻烦大家了 以下是题目 描述 Polycarp特别喜欢数字被10^k整除。 在给定数量的n Polycarp想要删除最少数量的数字以获得可被10^k整除的数字。例如,如果k=3,在数字30020中,足以删除单个数字(2)。在这种情况下,结果为3000,可由10^3=1000整除。 编写一个程序,打印给定整数n删除的最小位数,以便结果可被10^k整除。 输入 输入的唯一行包含两个整数n和k(0≤n≤2 000 000 000,1≤k≤9 )。 它保证答案存在。输入中的所有数字都用传统的整数表示法表示,即没有任何额外的前导零。 输出 输出要删除的所需最小位数。从数字n中删除适当的w个数字后,结果应具有可被10^k整除的值。 样例输入1 30020 3 样例输出1 1 样例输入2 100 9 样例输出2 2 样例输入3 10203049 2 样例输出3 3 提示 在示例2中,可以删除两个数字:1和任何0.结果是数字0,它可以被任何数字整除。 以下是我的代码 #include<iostream> #include<cstring> using namespace std; int main() { string s; int n; int a[10]; memset(a,0,sizeof(a)); cin>>s>>n;//s是要处理的数 n是题目中的k int l=s.length(); for(int i=0;i<l;++i) a[i]=s[l-1-i]-48;//把字符串转换为数字存入a int y=0,o=0;int j=0;//y用来记非0数的个数,字母o用来记0的个数; while(o<n&&j<l) { if(a[j]==0) o++; else {y++;a[j]=0;} j+=1; } int bol=0;//以下用于判断会不会出现样例2的情况 for(int i=0;i<l;++i) if(a[i]!=0) bol=1; if(bol) cout<<y; else cout<<l-1;//如果是类似样例2的情况,输出字符串长度-1,即在字符串中只留下一个0,其余删去 return 0; } 这个代码题目给的数据都没有问题,自己也试了一些,就是Wrong Answer 心累心累。。求指点,谢谢大家
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
TTTAO1015机器人#1 · 2017/10/14
感觉上面代码有点不清晰 我又写了一个版本 仍然WA[em23] #include<iostream> #include<cstring> using namespace std; int main() { string s;int k; cin>>s>>k; int ls=s.length(); int a[10]; memset(a,0,sizeof(a)); for(int i=0;i<ls;++i) a[i]=s[ls-1-i]-48; int c0=0; for(int i=0;i<ls;++i) if(a[i]==0) c0+=1; if(c0<k) cout<<ls-1<<endl; else { int y=0,o=0;int j=0; while(o <k) { if(a[j]==0) o++; else y++; j+=1; } cout<<y<<endl; } return 0; }
ztinpn机器人#2 · 2017/10/14
希望大神能写个可以自动寻找bug的代码。。
Slmalone机器人#3 · 2017/10/14
【 在 ztinpn 的大作中提到: 】 : 希望大神能写个可以自动寻找bug的代码。。 这个可以写,找个正确的代码对拍一下呗
Slmalone机器人#4 · 2017/10/14
贪心的从后边网前边找。 你可以用我的程序对拍 ``` #include <bits/stdc++.h> using namespace std; int main() { string s; int k, n; cin >> s >> k; n = s.size(); int ans = 0; int cnt = 0; for (int i = n - 1; i >= 0; --i) { if (s[i] == '0') { cnt++; if (cnt == k) break; } else { ans++; } } if (cnt < k) ans += (cnt - 1); cout << ans << endl; return 0; } ```
TTTAO1015机器人#5 · 2017/10/14
谢谢了先给大佬磕头[ema33] 【 在 Slmalone 的大作中提到: 】 : 贪心的从后边网前边找。 你可以用我的程序对拍 : ``` : #include <bits/stdc++.h>
lzj0218机器人#6 · 2017/10/14
这是codeforces上的题吧,codeforces上提交后能看到哪组测试用例没有通过啊
nanguohao机器人#7 · 2017/10/14
为什么样例3输出的是3
linst8100机器人#8 · 2017/10/14
要是这个数里没有零删完了怎么办?
TTTAO1015机器人#9 · 2017/10/15
因为10203049删去3、4、9就可被10的2次方整除 【 在 nanguohao 的大作中提到: 】 : 为什么样例3输出的是3