用cout输出字符串时间超限怎么办
#include<bits/stdc++.h>
using namespace std;
int l,c,s;
char a[30];
int b[30];
void dfs(int x,int y,int n,int m,string p){
if(y==l&&n<=0&&m<=0){
printf("%s\n",p.c_str());
s++;
return;
}
if(s==25000){
exit(0);
}
if(b[x]<n||c-x-b[x]+1<m||x>c){
return;
}
if(a[x]=='a'||a[x]=='e'||a[x]=='i'||a[x]=='o'||a[x]=='u'){
dfs(x+1,y+1,n-1,m,p+a[x]);
}
else{
dfs(x+1,y+1,n,m-1,p+a[x]);
}
dfs(x+1,y,n,m,p);
return;
}
int main(){
freopen("ticket.in","r",stdin) ;
freopen("ticket.out","w",stdout);
scanf("%d%d",&l,&c);
for(int i=1;i<=c;i++){
scanf("%s",&a[i]);
if(a[i]=='a'||a[i]=='e'||a[i]=='i'||a[i]=='o'||a[i]=='u'){
s++;
}
}
sort(a+1,a+c+1);
for(int i=1;i<=c;i++){
b[i]=s;
if(a[i]=='a'||a[i]=='e'||a[i]=='i'||a[i]=='o'||a[i]=='u'){
s--;
}
}
dfs(1,0,1,2,"");
return 0;
}
这段代码有一个点超了0.1秒
改用 printf , 速度快非常多
cout是一个缓冲的输出流,printf是一个非缓冲的输出函数
使用printf代替cout来输出字符串
在默认的情况下,cout用空格填充字段中未被使用的部分,可以用fill()成员函数来改变填充字符。例如,下面的函数调用将填充字符改为星号:
cout.fill('*');
新填充的字符将一直有效,直到更改它为止。