A:说实话没看懂。。随便瞎搞的
#include <cstdlib>
#include <cctype>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <vector>
#include <string>
#include <iostream>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <bitset>
using namespace std;
#define PB push_back
#define MP make_pair
#define REP(i,n) for(int i=0;i<(n);++i)
#define FOR(i,l,h) for(int i=(l);i<=(h);++i)
#define DWN(i,h,l) for(int i=(h);i>=(l);--i)
#define CLR(vis,pos) memset(vis,pos,sizeof(vis))
#define PI acos(-1.0)
#define INF 0x7FFFFFFF
#define LINF 1000000000000000000LL
#define eps 1e-8
typedef long long ll;
int main()
{
int n;
string s;
cin>>n>>s;
int ans=0;
REP(i,n)
{
ans++;
if(s[i]=='0')
break;
}
cout<<ans<<endl;
return 0;
}
B:简单模拟
#include <cstdlib>
#include <cctype>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <vector>
#include <string>
#include <iostream>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <bitset>
using namespace std;
#define PB push_back
#define MP make_pair
#define REP(i,n) for(int i=0;i<(n);++i)
#define FOR(i,l,h) for(int i=(l);i<=(h);++i)
#define DWN(i,h,l) for(int i=(h);i>=(l);--i)
#define CLR(vis,pos) memset(vis,pos,sizeof(vis))
#define PI acos(-1.0)
#define INF 0x7FFFFFFF
#define LINF 1000000000000000000LL
#define eps 1e-8
typedef long long ll;
int main()
{
int n;
int a[1234];
cin>>n;
int pre=-1;
REP(i,n)
{
scanf("%d",&a[i]);
if(pre==-1 && a[i])
pre=i;
}
int ans=0;
if(pre!=-1)
{
ans++;
int flag=1;
FOR(i,pre+1,n-1)
{
if(a[i] && flag)
ans++;
if(!a[i])
flag=0;
if(a[i] && flag==0)
{
flag=1;
ans+=2;
}
}
}
cout<<ans<<endl;
return 0;
}
C:从后往前枚举,然后再从当前位置向后找符合条件的且字典序最小的,输出一下就行了
#include <cstdlib>
#include <cctype>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <vector>
#include <string>
#include <iostream>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <bitset>
using namespace std;
#define PB push_back
#define MP make_pair
#define REP(i,n) for(int i=0;i<(n);++i)
#define FOR(i,l,h) for(int i=(l);i<=(h);++i)
#define DWN(i,h,l) for(int i=(h);i>=(l);--i)
#define CLR(vis,pos) memset(vis,pos,sizeof(vis))
#define PI acos(-1.0)
#define INF 0x7FFFFFFF
#define LINF 1000000000000000000LL
#define eps 1e-8
typedef long long ll;
char s[1234];
int n,p;
int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
cin>>n>>p>>s;
char a[1234];
REP(i,n) a[i]=s[i];
int flag=0;
DWN(i,n-1,0)
{
FOR(j,s[i]+1,'a'+p-1)
{
a[i]=j;
if(a[i]==a[i-1] || a[i]==a[i-2]) continue;
int check=0;
FOR(k,i+1,n-1)
{
int vis=0;
FOR(o,'a','a'+p-1)
{
if(o!=a[k-1] && o!=a[k-2])
{
a[k]=o;
vis=1;
break;
}
}
if(vis!=1)
{
check=1;
break;
}
}
if(check==0)
{
flag=1;
break;
}
}
if(flag) break;
}
if(flag) a[n]='\0',cout<<a<<endl;
else cout<<"NO\n";
return 0;
}
这下DE干脆没看了。。。有时间补。。
我好懒啊T T