标签:
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
#include<iostream> #include<cstdio> #include<cmath> #include<string> #include<queue> #include<algorithm> #include<stack> #include<cstring> #include<vector> #include<list> #include<set> #include<map> using namespace std; #define ll long long #define mod 1000000007 #define inf 999999999 int scan() { int res = 0 , ch ; while( !( ( ch = getchar() ) >= ‘0‘ && ch <= ‘9‘ ) ) { if( ch == EOF ) return 1 << 30 ; } res = ch - ‘0‘ ; while( ( ch = getchar() ) >= ‘0‘ && ch <= ‘9‘ ) res = res * 10 + ( ch - ‘0‘ ) ; return res ; } char a[10100]; int dp[10100][30];//存位置 char ans[10100]; int minn(int x,int y) { return a[x]<=a[y]?x:y; } void rmq(int len) { for(int i=0; i<len; i++) dp[i][0]=i; for(int j=1; (1<<j)<len; j++) for(int i=0; i+(1<<j)-1<len; i++) dp[i][j]=minn(dp[i][j-1],dp[i+(1<<(j-1))][j-1]); } int query(int l,int r) { int x=(int)(log((double)(r-l+1))/log(2.0)); return minn(dp[l][x],dp[r-(1<<x)+1][x]); } int main() { int x,y,z,i,t; while(~scanf("%s%d",a,&x)) { int len=strlen(a); rmq(len); int st=0,en=x; int flag=0; for(i=0; i<len-x; i++) { int number=query(st,en); //cout<<st<<" "<<en<<" "<<number<<endl; st=number+1; en=i+x+1; ans[flag++]=a[number]; } for(i=0; i<flag; i++) if(ans[i]!=‘0‘) break; for(t=i; t<flag; t++) printf("%c",ans[t]); if(i==flag) printf("0"); printf("\n"); } }
暴力思路:在字符串中查找a[i]>a[i+1];找到第一个删掉;如果没有,说明是一直上升;最后的数最大,删掉最后一个;
#include<iostream> #include<cstdio> #include<cmath> #include<string> #include<queue> #include<algorithm> #include<stack> #include<cstring> #include<vector> #include<list> #include<set> #include<map> using namespace std; #define ll long long #define mod 1000000007 #define inf 999999999 int scan() { int res = 0 , ch ; while( !( ( ch = getchar() ) >= ‘0‘ && ch <= ‘9‘ ) ) { if( ch == EOF ) return 1 << 30 ; } res = ch - ‘0‘ ; while( ( ch = getchar() ) >= ‘0‘ && ch <= ‘9‘ ) res = res * 10 + ( ch - ‘0‘ ) ; return res ; } vector<int>v; char a[1010]; int main() { int x,y,z,i,t; while(~scanf("%s%d",a,&x)) { v.clear(); int len=strlen(a); for(i=0; i<len; i++) v.push_back(a[i]-‘0‘); while(x--) { int flag=1; int len=v.size(); for(i=0; i<len-1; i++) { if(v[i]>v[i+1]) { flag=0; v.erase(v.begin()+i); break; } } if(flag) v.erase(v.begin()+len-1); } for(i=0; i<v.size(); i++) if(v[i]) break; for(t=i; t<v.size(); t++) printf("%d",v[t]); if(i==v.size()) printf("0"); printf("\n"); } return 0; }
标签:
原文地址:http://www.cnblogs.com/jhz033/p/5388524.html