• 1040 有几个PAT (25分)


    25分题中不是很难的一道,没错我就是挑软柿子捏,今天一定要把basic搞完,阿弥陀佛别拖拉了。。。


    第一次提交后三个测试点运行超时(循环过多吧)。。。。一开始是每遇到一个A就从前往后循环看这个A前面有多少P,有多少T。

    第二次提交后后两个测试点答案错误,但是不超时了!微笑 -

    由于结果可能比较大,只输出对 1000000007取余数的结果。(题目中的说明)

    不要忽略这一句,这说明了个数有可能很大,所以将sum改为longlong型后面两个测试点就过了!!

    呵呵。。。。


    算法思想就是记录每一个A前后的P、T个数,然后乘一下再加一下~

    #include<iostream>
    #include<string>
    
    using namespace std;
    
    int main() {
    	string a;
    	int i, j, k;
    	int p[100001] = { 0 };
    	int t[100001] = { 0 };
    	long long int sum = 0;
    	int ptemp = 0, ttemp = 0;
    	getline(cin, a);
    	j = 0;
    	//从前往后统计每一个A前P的个数
    	for (i = 0; i < a.length(); i++) {
    		if (a[i] == 'P') {
    			ptemp++;
    		}
    		if (a[i] == 'A') {
    			p[j++] = ptemp;
    		}
    	}
    	k = 0;
    	//从后往前统计每一个人A后T的个数
    	for (i = a.length() - 1; i >= 0; i--) {
    		if (a[i] == 'T') {
    			ttemp++;
    		}
    		if (a[i] == 'A') {
    			t[k++] = ttemp;
    		}
    	}
    	//p--123  
    	//t--321
    	for (i = 0; i < j; i++) {
    		sum += p[i] * t[j - i - 1];
    	}
    	
    	cout << sum % 1000000007 << endl;
    	return 0;
    }
    
  • 相关阅读:
    socket.io
    CUDA升级后
    QT安装
    windows时钟服务设置
    QT的DPI支持
    cudaDeviceProp结构体
    C#调用C++的dll各种传参
    「LibreOJ#516」DP 一般看规律
    「LibreOJ#515」贪心只能过样例 (暴力+bitset)
    [Codeforces888E]Maximum Subsequence(暴力+meet-in-the-middle)
  • 原文地址:https://www.cnblogs.com/tanghm/p/12658617.html
Copyright © 2020-2023  润新知