pat乙级1003(代码片段)

moujun1001 moujun1001     2023-01-19     554

关键词:

题目

    题目地址:PAT 乙级 1003

 

题解

    规律观察题,本题的关键在于把题读懂,同时还有几个比较容易疏忽的地方需要注意;总之这道题要考虑的东西更多,细节上也要特别注意;

    规律:“如果 aPbTc 是正确的,那么 aPbATca 也是正确的”,这是理解本题的关键信息,观察之后会发现,当b的字符串里再增加一个A,那么T之后的字符串就会多出a个A(特别注意,这里的 ‘ca’ 实际上是 c + a 个A字符的关系),那么这个关系也就显而易见了,只有在 a * b = c 的条件下,才会有这样的结果,我们再来简单推导一下:

            设  a * b = c

            由题设条件可知:a * (b + 1) = c + a,再次说明,ca表明有c + a个A

            将上式分配可得:a * b + a = c + a…………(1)

            又  a * b = c

            则 (1) 式成立

    通过以上分析可知,本题的字符中的关系就是:a * b = c

    在分析完本题最重要的条件之后,还需要在代码过程中注意几点问题;需要说明的是,题目条件中三个条件是层层递进的关系,也就是说只有满足之前的条件才能判断之后的条件

    从以上先决条件推导可得如下两个需要注意的问题:

          1. 字符 P 和 T 在一个字符串中只能出现一次;

          2. P 和 T 之间必须有字符 A;

    因为没有完全理解之前那句话,结果导致没有一次AC(-_-||)

 

代码

 1 #include <iostream>
 2 #include <string>
 3 using namespace std;
 4 
 5 int main() 
 6     string str;
 7     int n = 0;
 8     int cnta = 0, cntb = 0, cntc = 0;
 9     bool flagp = false, flagt = false, flaga = false, flagx = false;
10     cin >> n;
11     for (int i = 0; i < n; i++) 
12         cin >> str;
13         for (int j = 0; j < str.size(); j++) 
14             switch (str[j]) 
15                 case A:
16                     flaga = true;
17                     if (!flagp && !flagt) cnta++;
18                     else if (flagp && !flagt) cntb++;
19                     else if (flagp && flagt) cntc ++;
20                     break;
21                 case P:
22                     if (flagp)
23                         flagx = true;
24                     else
25                         flagp = true;
26                     break;
27                 case T:
28                     if (flagt)
29                         flagx = true;
30                     else
31                         flagt = true;
32                     break;
33                 default:
34                     flagx = true;
35                     break;
36             
37             if (flagx) break;
38         
39         if (flagx)
40             cout << "NO" << endl;
41         else if (flagp && flagt && flaga && cntb != 0 && cnta * cntb == cntc)
42             cout << "YES" << endl;
43         else
44             cout << "NO" << endl;
45         cnta = cntb = cntc = 0;
46         flagp = flagt = flaga = flagx = false;
47     
48 
49     return 0;
50 

 

java1003我要通过!(20分)pat乙级pat(basiclevel)practice(中文)(代码片段)

你是最棒的前言前言题目:1003我要通过!(20分)思路代码前言学得越多,不会得越多种一颗树的最佳时间是十年前,其次就是现在pat所有题解代码都会陆续上传到Github,请好兄弟们自行下载:https://github.com/... 查看详情

pat乙级1003(代码片段)

1003我要通过!(20分)题目地址:https://pintia.cn/problem-sets/994805260223102976/problems/994805323154440192“答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于PAT的“答案正确”大派送——只要读入的字符串满足下列条件,系统就... 查看详情

[pat乙级]practise1003我要通过!(代码片段)

PAT(BasicLevel)Practice(中文)10031003我要通过“答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于PAT的“答案正确”大派送——只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”。得... 查看详情

pat乙级.1003.我要通过

“答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于PAT的“答案正确”大派送——只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”。得到“答案正确”的条件是:1.字符串中必须... 查看详情

pat乙级1003.我要通过!

题目:“答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于PAT的“答案正确”大派送——只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”。得到“答案正确”的条件是:1.字符串... 查看详情

pat乙级1038(代码片段)

题目链接https://pintia.cn/problem-sets/994805260223102976/problems/994805284092887040题解一这份代码最后一个点会超时//PATBasicLevel1038//https://pintia.cn/problem-sets/994805260223102976/problems/994805284092887040#inclu 查看详情

pat——乙级1016(代码片段)

乙级PAT的1016乙级的题相对比较简单,我也是主要联系写代码的格式,而不是联系算法。1016 部分A+B (15point(s))正整数 A 的“D?A??(为1位整数)部分”定义为由 A 中所有 D?A?? 组成的新整数 P?A??。... 查看详情

pat乙级1040有几个pat(25分)(代码片段)

题目地址#include<cstdio>#include<cstring>constintMAXN=100010;constintMOD=1000000007;charstr[MAXN];//字符串intleftNump[MAXN]=0;//每一位左边含p的个数intmain() scanf("%s",str); intlen& 查看详情

pat乙级1045(代码片段)

题目   题目地址:PAT乙级1045 题解   本题的解法比较巧妙,刚开始的试着用暴力求解,果不其然时间超限……   变换思路,既然对于每个元素来说满足的条件是前小后大,那么对数组排序,... 查看详情

pat乙级1017(代码片段)

题目  题目地址:PAT乙级1017 题解  粗看是一道大数除法题,实际上只不过是通过字符数组模拟除法过程,理解之后还是比较简单的;  具体分析一下本题;  因为题设中的除数(n)是一位整数,因... 查看详情

pat乙级1085pat单位排行(25分)(代码片段)

题目地址#include<cstdio>#include<iostream>#include<cmath>#include<map>#include<algorithm>#include<string>#include<vector>usingnamespacestd;structnode intA; intB; 查看详情

pat乙级1033(代码片段)

题目题目地址:https://pintia.cn/problem-sets/994805260223102976/problems/994805288530460672 题解   本题一直有一分的样例点过不了,原因在于用了cin接收输入的字符……   问题在于:如果用cin输入,无法接收无坏键的... 查看详情

pat乙级1014(代码片段)

  本题主要还是考验细致程度,需要把各种情况考虑到、题审清楚1#include<iostream>2#include<string>3usingnamespacestd;45intmain()6stringstr[4];7for(inti=0;i<4;i++)8getline(cin,str[i]);9intstr_1=0,str_2=0;10str_1=str[0 查看详情

pat乙级1019(代码片段)

  本题没有考虑到小于1000的情况,当小于1000的时需要给vector的向量中推入0,直到向量中有四位数字,之后再进行排序并进行相关计算 1#include<iostream>2#include<algorithm>3#include<vector>4#include<cmath>5usingnamespacestd... 查看详情

pat乙级1023(代码片段)

1#include<iostream>2usingnamespacestd;34intmain()5intnum[10]=0;6for(inti=0;i<10;i++)7cin>>num[i];8for(inti=1;i<10;i++)9if(num[i]!=0)10cout<<i;11num[i]--;12break;131415fo 查看详情

pat乙级1013(代码片段)

  还是审题没把范围看清楚,没一次AC  题中m和n都表示第几个素数,范围是10000,所以查询的数组中需要的素数量至少10000,所以需要计算大概2~120000的整数才能查到10000个素数#include<iostream>#include<cmath>#include<vector... 查看详情

pat乙级1016(代码片段)

1#include<iostream>2#include<cmath>3usingnamespacestd;45intmain()6inta=0,da=0;7intb=0,db=0;8cin>>a>>da>>b>>db;9intcnta=0,cntb=0;10intchu=a,yu=0;11while(chu>=10) 查看详情

pat乙级1095解码pat准考证(25分)(代码片段)

题目地址#include<cstdio>#include<iostream>#include<algorithm>#include<string>#include<vector>#include<map>#include<unordered_map>usingnamespacestd;intn,m;constint 查看详情