201703-2 学生排队
using namespace std;
#define N 1005
int n,m;
int main(){
cin>>n>>m;
int a[1005];
for(int i=1;i<=n;i++){
a[i]=i;
}
int id,q,index;
for(int i=0;i<m;i++){
cin>>index>>q;
for(int i=1;i<=n;i++){
if(a[i]==index) id=i;
}
if(q>0){//向后
for(int j=0;j<q;j++){
a[j+id]=a[j+id+1];
}
a[id+q]=index;
}else if(q<0){
for(int j=0;j<-q;j++){
a[id-j]=a[id-j-1];
}
a[id+q]=index;
}
}
for(int i=1;i<=n;i++) cout<<a[i]<<' ';
return 0;
}
//
201703-3 MarkDown
我太垃圾了,这道题很多细节问题,我一开始写的是读一行输出一行,结果发现段落部分输出< /p >时,始终不能和段落最后一句话在同一行输出。由此想到此法不行,但是懒得思考便看了题解,害。
using namespace std;
#define N 1005
string res,line;
int link(int i);
int specify(int i);
int link(int i){
res+="<a href=\"";
int j=i;
while(line[i]!='(') i++;
for(i++;line[i]!=')';i++){
if(line[i]=='_') i=specify(i);
else res+=line[i];
}
res+="\">";
int k=i;
for(j++;line[j]!=']';j++){
if(line[j]=='_') j=specify(j);
else res+=line[j];
}
res+="</a>";
return k;
}
int specify(int i){
res+="<em>";
for(i++;line[i]!='_';i++){
if(line[i]=='['){
i=link(i);
}else res+=line[i];
}
res+="</em>";
return i;
}
int main(){
int flag1=0,flag2=0;
while(getline(cin,line)){
if(line.size()==0){
if(flag1==1){
flag1=0;
res+="</ul>\n";
}
if(flag2==1){
flag2=0;
res+="</p>\n";
}
continue;
}
if(line[0]=='#'){
int num=0,i=0;
for(i=0;line[i]=='#';i++) num++;
res+="<h";
res+=(num+'0');
res+='>';
while(line[i]==' ') i++;
for(;i<line.size();i++){
if(line[i]=='['){
i=link(i);
}else if(line[i]=='_'){
i=specify(i);
}else res+=line[i];
}
res+="</h";
res+=(num+'0');
res+=">\n";
}else if(line[0]=='*'){
if(flag1==0){
res+="<ul>\n";
flag1=1;
}
res+="<li>";
int i=1;
while(line[i]==' ') i++;
for(;i<line.size();i++){
if(line[i]=='[') i=link(i);
else if(line[i]=='_') i=specify(i);
else res+=line[i];
}
res+="</li>\n";
}else{
if(flag2==0){
res+="<p>";
}else res+='\n';
flag2=1;
for(int i=0;i<line.size();i++){
if(line[i]=='[') i=link(i);
else if(line[i]=='_') i=specify(i);
else res+=line[i];
}
}
}
if(flag1==1){
res+="</ul>\n";
}
if(flag2==1){
res+="</p>\n";
}
cout<<res;
system("pause");
return 0;
}
//
201709-2 公共钥匙盒
很奇怪,代码测试只有70分,显示运行报错?
找了很久硬是没看出什么问题。网上找题解对比,也看不出哪错了。
要是有大佬看到,拜托拜托帮忙看看!!!
求求求了~
#define N 1005
int n,k;
typedef struct {
int number;
int time;
int flag;
}node;
int cmp(const void *b,const void *a){
node *c=(node *)a;
node *d=(node *)b;
if(c->time!=d->time) return d->time-c->time;
else if(c->flag!=d->flag) return c->flag-d->flag;
else return d->number-c->number;
}
int main(){
node borrow[1005];
cin>>n>>k;
int number,begin,time=0;
int t[1005];
for(int i=1;i<=n;i++) t[i]=i;
for(int i=0;i<2*k;i++){
cin>>number>>begin>>time;
borrow[i].number=number;
borrow[i].time=begin;
borrow[i].flag=0;
borrow[++i].number=number;
borrow[i].time=begin+time;
borrow[i].flag=1;
}
qsort(borrow,2*k,sizeof(borrow[0]),cmp);
for(int i=0;i<2*k;i++){
if(borrow[i].flag==0){//借钥匙
for(int j=1;j<=n;j++){
if(t[j]==borrow[i].number){
t[j]=0;
break;
}
}
}else{
for(int j=1;j<=n;j++){
if(t[j]==0){
t[j]=borrow[i].number;
break;
}
}
}
}
for(int i=1;i<=n;i++) cout<<t[i]<<' ';
system("pause");
return 0;
}
//