PAT 1040 有几个PAT

个人学习记录,初学者,代码不够严谨规范,有很多不必要的数据定义。

PAT 1040 有几个PAT_第1张图片

#include
#include
int main(){
    char str[100010];
    scanf("%s",str);
    int p_count=0;
    int len=strlen(str);
    int q;
    int p_before_a[100010]={0};
    int result[100010]={0};
    for(q=0;q<len;q++){
    	if(str[q]=='P'){
    		break;
		}
	}
	//printf("q=%d,len=%d",q,len);
	int a_num=0,t_num=0;//计数器 
	int a_begin=0; 
	if(q!=len){
		for(int i=q;i<len;i++){
			if(str[i]=='P'){
				p_count++;
			}
			else if(str[i]=='A'){
				p_before_a[a_num++]=p_count;
			}
			else if(str[i]=='T'){
				int sum=0;
				//printf("a_begin=%d,a_num=%d\n",a_begin,a_num);
				for(int i=a_begin;i<a_num;i++){
					sum+=p_before_a[i]; 
				}
				a_begin=a_num;
				if(t_num==0) {
					//	printf("t_num=%d result=%d\n",t_num,result[t_num-1]);
					result[t_num++]=sum;
				}
				else{
					//printf("t_num=%d result=%d\n",t_num,result[t_num-1]);
				result[t_num]=sum+result[t_num-1];
				//这个地方不能写成 result[t_num]=sum+result[t_num-1];
				t_num++;
				}
			}
		else{
		}	
		}
	long long sum=0;
	//for (int i=0;i
	//	printf("%d",p_before_a[i]);
	//}
	for(int i=0;i<t_num;i++){
	//	printf("%d ",result[i]);
		sum+=result[i];
	}
	printf("%d",sum%1000000007);
	}
	else printf("%d",0);
} 

 

这里需要注意的是将sum定义为long long,否则精度会损失,即使按照题目要求除以1000000007也不能通过测试。

你可能感兴趣的:(PTA,c语言,c++,开发语言)