2025年同济大学计算机考研复试机试真题
2025年同济大学计算机考研复试上机真题
历年同济大学计算机考研复试上机真题
历年同济大学计算机考研复试机试真题
更多学校题目开源地址:https://gitcode.com/verticallimit1/noobdream
N 诺 DreamJudge 题库:输入 “学校名称” 即可筛选该校历年机试真题,题目均在考纲范围内,按难度自动排序。还可搭配《计算机考研机试攻略》刷题,书中题目可通过题号直接在题库中查找。
TAT的个数
题目描述
Time Limit: 1000 ms
Memory Limit: 256 mb
小诺有一个只包含T和A的字符串,小诺想知道这个序列中有多少个TAT?
比如:TATT中包含了2个不同位置的TAT,TAATT中包含了4个不同位置的TAT。
输入输出格式
输入描述:
多组数据输入。 输入一行字符串,字符串长度小于100000。
输出描述:
输出答案。
输入输出样例
输入样例#:
TATT
输出样例#:
2
代码一
- #include <iostream>
- #include <string>
- #include <vector>
- using namespace std;
- int main() {
- string s;
- while (cin >> s) {
- int n = s.length();
- vector<long long> leftT(n, 0);
- vector<long long> rightT(n, 0);
- leftT[0] = (s[0] == 'T') ? 1 : 0;
- for (int i = 1; i < n; i++) {
- leftT[i] = leftT[i-1] + (s[i] == 'T' ? 1 : 0);
- }
- rightT[n-1] = (s[n-1] == 'T') ? 1 : 0;
- for (int i = n-2; i >= 0; i--) {
- rightT[i] = rightT[i+1] + (s[i] == 'T' ? 1 : 0);
- }
- long long ans = 0;
- for (int i = 0; i < n; i++) {
- if (s[i] == 'A') {
- ans += leftT[i] * rightT[i];
- }
- }
- cout << ans << endl;
- }
- return 0;
- }
代码二
#include<bits/stdc++.h>using namespace std;int main(){string s;while(cin>>s){int t=0;//总的t的个数int lt=0;//左边t的数量int len=s.size();long long ans=0;for(int i=0;i<len;i++){if(s[i]=='T'){t++;}}for(int i=0;i<len;i++){if(s[i]=='T'){lt++;}if(s[i]=='A'){ans+=lt*(t-lt);}}cout<<ans<<endl;}return 0;}
代码三
- #include<bits/stdc++.h>
- using namespace std;
- int main() {
- string s;
- while (cin >> s) {
- if (s.size() == 0)
- continue;
- long long count = 0, len = s.size();
- vector<int>T_num(len);
- T_num[0] = s[0] == 'T' ? 1 : 0;
- for (int i = 1; i < len; i++) {
- if (s[i] == 'T')
- T_num[i] = T_num[i - 1] + 1;
- else
- T_num[i] = T_num[i - 1];
- }
- for (int i = 0; i < len; i++)
- if (s[i] == 'A')
- count += T_num[i] * (T_num[len - 1] - T_num[i]);
- cout << count << endl;
- }
- return 0;
- }