今天写了两道题。
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;
}