P8032 题解
SOL:
这道题就是一道纯字符串模拟题,我们可以把输入存到一个字符串内,然后用一个 for 循环逐位输出。这道题并不难,它的难点是考虑的东西很多,所以我们可能需要尝试很多遍才能通过。
展示代码之前先给大家介绍一个好用的库函数,就是 setw(sum),它的用处就是输出 sum 个空格,这个函数可以减轻很多时间复杂度。我们可以把它需要的空格数量存到一个 int 数组里,然后需要输出的时候用这个函数输出就可以了。
AC code
由于我写的比较迷惑,所以还是写上注释吧。
#include<bits/stdc++.h> using namespace std; string s; int se=1;//这个就是我之前介绍过的输出空格的变量。 int main() { cin>>s; for(int i=0; i<s.size(); i++) { if(s[i]=='{') { if(s[i+1]!='}')cout<<setw(se)<<"{"<<endl,se+=2,cout<<setw(se);//这里是为了避免两个括号之间有一个回车的尴尬状况。 else { cout<<setw(se)<<"{",se+=2,cout<<setw(se); } } else if(s[i]=='}') { if(s[i-1]!=',') { //这里是为了避免括号和逗号之间有空格。 se-=2; cout<<endl<<setw(se)<<"}"; } else { if(s[i-1]!='{') { //这个也是为了避免两个括号直接有一个回车 cout<<endl<<setw(se)<<"}",se-=2; } else { cout<<setw(se)<<"}",se-=2; } } } else if(s[i]==',')cout<<","<<endl<<setw(se); //这里还有另外一种做法,但是代码比较多,所以我就不写了。 else cout<<s[i];//这个是正常的情况。 } return 0;//完美的结束。 }
高清无注释的代码:
#include<bits/stdc++.h> using namespace std; #define N 1000005 int haed[N],v[N],nxt[N],idx=1,n,m; void add(int a,int b){ v[idx]=b; nxt[idx]=haed[a]; head[a]=idx++; } int main(){ memset(head,-1,sizeof(head)); cin>>n>>m; for(int i=1;i<=m;i++){ cin>>a>>b; add(a,b); } for(int i=haed[x];i!=1;i=nxt[i]){ int y=v[i]; } return 0; }

浙公网安备 33010602011771号