2.4学习总结
今天写了两道题。
p1449:后缀表达式。通过栈来储存数字,遇到运算符号则对栈顶的两个数进行运算
#include <stdio.h>
#include <stdlib.h>
int main()
{
int top=0,i=1,a=0;
int z[55];
char s[55];
while(1){
scanf("%c",&s[i]);
if(s[i]=='@')
break;
if(s[i]=='.'){
top++;
z[top]=a;
a=0;
}
if(s[i]<='9'&&s[i]>='0'){
a=a*10+s[i]-'0';
}
if(s[i]=='+'){
z[top-1]=z[top-1]+z[top];
top--;
}
if(s[i]=='-'){
z[top-1]=z[top-1]-z[top];
top--;
}
if(s[i]=='*'){
z[top-1]=z[top-1]*z[top];
top--;
}
if(s[i]=='/'){
z[top-1]=z[top-1]/z[top];
top--;
}
i++;
}
printf("%d",z[top]);
return 0;
}
P2058:海港
用三个数组分别储存各国人数,每个人到达的时间,每个人的国籍,每当新的船到达,检查之前的船到达时间是否在24小时以外,在的话将其数据删除。
#include <stdio.h>
#include <stdlib.h>
int q[100005],f[300005],time[300005];
int main()
{
int n,t,k,m=1,num=0,head=1;
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d %d",&t,&k);
for(int j=1;j<=k;j++){
scanf("%d",&f[m]);
time[m]=t;
if(q[f[m]]==0){
num++;
}
q[f[m]]++;
m++;
}
while(t-time[head]>=86400){
q[f[head]]--;
if(q[f[head]]==0){
num--;
}
head++;
}
printf("%d\n",num);
}
return 0;
}