标签:ret 找不到 文件 数据 ++ bre out 暴力 循环
Ly喜欢幸运数字,众所周知,幸运数字就是数字位上只有4和7的数字。
但是本题的幸运序列和幸运数字完全没关系,就是一个非常非常普通的序列。哈哈,是不是感觉被耍了,没错,你就是被耍了。
Ly现在手上有一个长度为N的幸运序列a,他想这样子折腾这个序列:
Ly想让你告诉他最后序列折腾成什么样子了。
需要注意的是,本题的序列从1开始编号
第一行N,K;
第二行N个数描述序列a。
N个数,输出最后的序列。
7 4 4727447 |
4427477 |
20%: 小数据
100%的数据中N<=100000,K<=109。
刚开始看到这题,我tm直接暴力模拟一遍,结果忘记了判断循环的情况,结果直接爆零了。
实际上我们判断一下循环的情况就好了。
代码:
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<algorithm> #define ll long long #define il inline #define db double using namespace std; il int gi() { int x=0,y=1; char ch=getchar(); while(ch<‘0‘||ch>‘9‘) { if(ch==‘-‘) y=-1; ch=getchar(); } while(ch>=‘0‘&&ch<=‘9‘) { x=x*10+ch-‘0‘; ch=getchar(); } return x*y; } il ll gl() { ll x=0,y=1; char ch=getchar(); while(ch<‘0‘||ch>‘9‘) { if(ch==‘-‘) y=-1; ch=getchar(); } while(ch>=‘0‘&&ch<=‘9‘) { x=x*10+ch-‘0‘; ch=getchar(); } return x*y; } int n,k,begin=1; int que[100045]; bool vis[100045]; il bool find() { for(int i=begin;i<n;i++) if(que[i]==4&&que[i+1]==7) { if(i%2) { que[i+1]=4; begin=i+1; } else { que[i]=7; begin=i-1; } if(vis[i]&&k%2==0) return 0; vis[i]=1; return 1; } return 0; } int main() { freopen("lucky.in","r",stdin); freopen("lucky.out","w",stdout); n=gi(),k=gi(); for(int i=1;i<=n;i++) que[i]=getchar()-‘0‘; while(k--) { if(!find()) break; } for(int i=1;i<=n;i++) printf("%d",que[i]); return 0; }
标签:ret 找不到 文件 数据 ++ bre out 暴力 循环
原文地址:http://www.cnblogs.com/gshdyjz/p/7419627.html