PAT 2014 秋

A 1084 Broken Keyboard

  注意大小写即可。

 1 #include <cstdio>
 2 #include <iostream>
 3 #include <algorithm>
 4 #include <string>
 5
 6 using namespace std;
 7
 8 int main()
 9 {
10     string inStr, outStr;
11     cin >> inStr >> outStr;
12     int inIndex = 0, outIndex = 0;
13     bool charFlag[200]={false};
14     while(inIndex < inStr.size())
15     {
16         if(inStr[inIndex] == outStr[outIndex])
17         {
18             inIndex++;
19             outIndex < outStr.size()-1 ? outIndex++ : outStr[outIndex] = ‘ ‘;
20         }
21         else
22         {
23             int tmpNum = (int)inStr[inIndex++];
24             tmpNum = tmpNum >= ‘a‘ ? tmpNum-‘a‘+‘A‘ : tmpNum;
25             if(!charFlag[tmpNum])
26             {
27                 charFlag[tmpNum] = 1;
28                 printf("%c", tmpNum);
29             }
30         }
31     }
32     return 0;
33 }

A 1085 Perfect Sequence

  1.二分查找,不然会超时

  2.注意数值的范围,有些地方需要使用long long

 1 #include <cstdio>
 2 #include <iostream>
 3 #include <algorithm>
 4 #include <vector>
 5
 6 using namespace std;
 7 typedef long long LL;
 8 vector<int> inputNumVec;
 9 int N, P;
10 int getMaxCnt(int lIndex)
11 {
12     int rIndex = inputNumVec.size()-1, midIndex;
13     LL tmpNum = (LL)inputNumVec[lIndex]*P;
14     while(lIndex <= rIndex)
15     {
16         midIndex = (lIndex + rIndex) >> 1;
17         if(inputNumVec[midIndex] > tmpNum)
18             rIndex = midIndex - 1;
19         else
20             lIndex = midIndex + 1;
21     }
22     return rIndex;
23 }
24 int main()
25 {
26     cin >> N >> P;
27     inputNumVec.resize(N);
28     for(int i = 0; i < N; ++ i)
29         cin >> inputNumVec[i];
30     sort(inputNumVec.begin(), inputNumVec.end());
31     int maxCnt = 0, tmpNum;
32     for(int i = 0; i <= inputNumVec.size()-maxCnt; ++ i)
33     {
34         tmpNum = getMaxCnt(i)-i+1;
35         if(tmpNum > maxCnt)
36             maxCnt = tmpNum;
37     }
38     cout << maxCnt;
39     return 0;
40 }

A 1086 Tree Traversals Again

  自己想个办法建树之后进行后续遍历即可

 1 #include <cstdio>
 2 #include <iostream>
 3 #include <algorithm>
 4 #include <vector>
 5 #include <string>
 6 #include <stack>
 7
 8 using namespace std;
 9 typedef long long LL;
10 #define NoAddr -1
11 typedef struct NODE
12 {
13     int val, lChild, rChild;
14     NODE(int v):val(v),lChild(NoAddr),rChild(NoAddr){}
15 }node;
16 vector<node> nodeVec;
17 stack<int> valVec;
18 bool coutFlag = false;
19 void postOrder(int tmpRoot)
20 {
21     if(tmpRoot >= nodeVec.size())
22         return;
23     if(nodeVec[tmpRoot].lChild > 0)
24         postOrder(nodeVec[tmpRoot].lChild);
25     if(nodeVec[tmpRoot].rChild > 0)
26         postOrder(nodeVec[tmpRoot].rChild);
27     coutFlag ?  printf(" ") :coutFlag = true;
28     cout << nodeVec[tmpRoot].val;
29 }
30 int main()
31 {
32     int N, tmpNum, lastIndex = 0;
33     string tmpStr;
34     bool pushFlag = true;
35     cin >> N;
36     while(N > 0)
37     {
38         cin >> tmpStr;
39         if(tmpStr == "Push")
40         {
41             cin >> tmpNum;
42             valVec.push(nodeVec.size());
43             nodeVec.push_back(NODE(tmpNum));
44             pushFlag ? nodeVec[lastIndex].lChild = nodeVec.size()-1 :
45                        nodeVec[lastIndex].rChild = nodeVec.size()-1 ;
46             lastIndex = nodeVec.size()-1;
47             pushFlag = true;
48         }
49         else
50         {
51             lastIndex = valVec.top();
52             valVec.pop();
53             pushFlag = false;
54             N--;
55         }
56     }
57     postOrder(0);
58     return 0;
59 }

A 1087 All Roads Lead to Rome

  1.城市名string 和 序号index的转换

  2.Dijkstra找最短距离

  3.DFS根据题目中给出的优先级找到所需的条件

  1 #include <cstdio>
  2 #include <stdlib.h>
  3 #include <cstring>
  4 #include <iostream>
  5 #include <algorithm>
  6 #include <vector>
  7 #include <string>
  8 #include <stack>
  9 #include <unordered_map>
 10 using namespace std;
 11 #define NoAddr -1
 12 #define MAX_CITY 210
 13 #define CLR(a,b) memset(a,b,sizeof(a))
 14 typedef long long LL;
 15 const int INF = 0x7f7f7f7f;
 16 int N, K;
 17 string citySt;
 18 int route[MAX_CITY][MAX_CITY]={0};
 19 vector<int> preVec[MAX_CITY];
 20 vector<int> tmpPath;
 21 vector<int> outPath;
 22 vector<int> disVec;
 23 vector<int> cityHappyValVec;
 24 int minCityCnt = MAX_CITY, maxHappy = -1, minPathCnt = 0, tmpMaxHappy = 0;
 25 unordered_map<string, int> cityToIndexMap;
 26 unordered_map<int, string> indexToCityMap;
 27 void Dijkstra(int u)
 28 {
 29     vector<bool> visitFlagVec(N, false);
 30     disVec.resize(N, INF);
 31     disVec[u] = 0;
 32     for(int i = 0; i < N; ++ i)
 33     {
 34         int minDis = INF, v = -1;
 35         for(int j = 0; j < N; ++ j)
 36             if(!visitFlagVec[j] && disVec[j] < minDis)
 37             {
 38                 minDis = disVec[j];
 39                 v = j;
 40             }
 41         if(v == -1)
 42             return;
 43         visitFlagVec[v] = true;
 44         for(int j = 0; j < N; ++ j)
 45         {
 46             if(!visitFlagVec[j] && disVec[v] + route[v][j] < disVec[j])
 47             {
 48                 disVec[j] = disVec[v] + route[v][j];
 49                 preVec[j].clear();
 50                 preVec[j].push_back(v);
 51             }
 52             else if(!visitFlagVec[j] && disVec[v] + route[v][j] == disVec[j])
 53             {
 54                 preVec[j].push_back(v);
 55             }
 56         }
 57     }
 58 }
 59 void dfs(int u)
 60 {
 61     if(u == 0)
 62     {
 63         minPathCnt ++;
 64         tmpPath.push_back(0);
 65         if(tmpMaxHappy > maxHappy)
 66         {
 67             maxHappy = tmpMaxHappy;
 68             outPath = tmpPath;
 69             minCityCnt = tmpPath.size();
 70         }
 71         else if(tmpMaxHappy == maxHappy && tmpPath.size() < minCityCnt)
 72         {
 73             outPath = tmpPath;
 74         }
 75         tmpPath.pop_back();
 76     }
 77     tmpPath.push_back(u);
 78     tmpMaxHappy += cityHappyValVec[u];
 79     for(int i = 0; i < preVec[u].size(); ++ i)
 80         dfs(preVec[u][i]);
 81     tmpMaxHappy -= cityHappyValVec[u];
 82     tmpPath.pop_back();
 83 }
 84 int main()
 85 {
 86     cin >> N >> K >> citySt;
 87     cityHappyValVec.resize(N, 0);
 88     string tmpCity, tmpSt, tmpEnd;
 89     int tmpHappy, tmpDis, stIndex, endIndex, endCityIndex;
 90     cityToIndexMap[citySt] = 0;
 91     indexToCityMap[0] = citySt;
 92     for(int i = 1; i < N; ++ i)
 93     {
 94         cin >> tmpCity >> tmpHappy;
 95         cityHappyValVec[i] = tmpHappy;
 96         cityToIndexMap[tmpCity] = i;
 97         indexToCityMap[i] = tmpCity;
 98         if(tmpCity == "ROM")
 99             endCityIndex = i;
100     }
101     CLR(route,0x7f);
102     while(K--)
103     {
104         cin >> tmpSt >> tmpEnd >> tmpDis;
105         stIndex = cityToIndexMap[tmpSt];
106         endIndex = cityToIndexMap[tmpEnd];
107         route[stIndex][endIndex] = tmpDis;
108         route[endIndex][stIndex] = tmpDis;
109     }
110     Dijkstra(0);
111     dfs(endCityIndex);
112     cout << minPathCnt << " " << disVec[endCityIndex] << " " << maxHappy << " " << (int)maxHappy/(outPath.size()-1) << endl;
113     bool symbolFlag = false;
114     for(int i = outPath.size()-1; i >= 0; -- i)
115     {
116         symbolFlag ? printf("->") : symbolFlag = true;
117         cout << indexToCityMap[outPath[i]];
118     }
119     return 0;
120 }

原文地址:https://www.cnblogs.com/codewars/p/11391781.html

时间: 2024-09-29 13:31:18

PAT 2014 秋的相关文章

2014秋C++ 第8周项目 分支程序设计

课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703.课程资源在云学堂"贺老师课堂"同步展示,使用的帐号请到课程主页中查看. 阅读并验证 阅读以下的两段程序,用"人脑"执行写出输出结果.再在计算机或手机上执行程序,对照自己写出的结果,进行反思.1.#include <iostream>using namespace std;int main(){    int a=1,b=2,c=3;

2014秋C++ 第10周项目 控制结构综合、C程序结构及输入输出

课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703,课程资源在云学堂"贺老师课堂"同步展示,使用的帐号请到课程主页中查看. [项目1:程序填充与阅读]云学堂中有完整的代码,不必再费力亲自输入:1.阅读下面的程序,在____上填上合适的成份,使程序能够输入"1+2"形式的式子,并输出相应的结果. #include <iostream> using namespace std; int

找工作感悟————秦卫卫(2014秋)

找工作感悟 秦卫卫 八月份仿真实验室国赛以后,我并没有开始做一些关于找工作的准备,而是在做自己感兴趣的cocos2d-x,大概花了一个星期的时间从安装平台到查资料写了一个flappybird小游戏,将近开学了才把找工作的事情摆到台面上来,于是继续看算法,在leetcode(这是一个神奇的网站,找工作上面的题一定要刷)上面刷题,开始的时候很费劲,后来逐渐找到了感觉,转眼开学了.阿里巴巴的面试大概在10天以后,但是我们还要做可恶的课程设计,而且我们组又没人做,于是我在实验室熬了3天把它做完了,于是开

2014秋C++ 第9周项目 循环程序设计

课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703,课程资源在云学堂"贺老师课堂"同步展示,使用的帐号请到课程主页中查看. 阅读程序 程序分析题,阅读下列程序,写出程序的运行结果,建议在上机时进行验证(云学堂将给出代码,直接复制到C4droid或CodeBlocks中运行即可),如果与自己的预期有出入,尤其注意对照找出问题. 读这些小程序,可以见识不少处理技巧.读程序,也是一种非常非常重要的学习方式,应该给予重视!

2014秋C++ 第7周项目 数据类型和表达式

课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703,课程资源在云学堂"贺老师课堂"同步展示,使用的帐号请到课程主页中查看. [项目1-编辑.编译.运行第一个程序]请编程序解决下面的问题:输入两个电阻r1和r2的阻值,计算并输出它们串联后的阻值r(设电阻值均为整数).分析:r=r1+r2,根据题意需要声明3个变量r.r1和r2,类型是整型(int).程序流程图如图,据此可以写出程序. 步骤:(1)打开CodeBloc

2014秋C++第5周项目1参考-见识初学者常见错误

课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703,实践要求见http://blog.csdn.net/sxhelijian/article/details/39493833. 课程资源在云学堂"贺老师课堂"同步展示,使用的帐号请到课程主页中查看. [项目1]下面是最经典和最简单的C++程序.在ideone.com中运行程序,并在能正确运行的程序基础上,"捣乱"制造些错误,对此进行观察.经验是从

写在2014秋招季

我的Offer 终于等到你,还好我没放弃,幸福来得好不容易-- 经历了2个多月的秋季校招季,我终于在11月18日这一天收到了省NOC的电话offer.从此,我也是有offer的人了,生活又有了新的希望,心情也从阴天瞬间变成了大晴天. 有准备的人 记得从暑假7.8月开始,我就为9月开始的秋季校招准备着,一是专业知识的储备,二是个人简历的优化. 专业知识的储备:我的暑假,主要是在省电信的平台运营支撑中心的实习中渡过的.那里的工作不算很多,在实习空余的时间,我就会复习已学的网络知识,学习未学过的lin

PAT 2018 秋

A 1148 Werewolf - Simple Version 思路比较直接:模拟就行.因为需要序列号最小的两个狼人,所以以狼人为因变量进行模拟. 1 #include <cstdio> 2 #include <cstdlib> 3 #include <iostream> 4 #include <algorithm> 5 #include <vector> 6 7 using namespace std; 8 int N; 9 vector&l

Pマークと一緒に….

しまう事を教えてあげてよォ??? [店内全品×送料無料]※再販決定★6日19時販売開始!!![SHISKY $マークプリント長袖パーカー スウェット 裏起毛 プルオーバー] 2014 秋新作 110cm 120cm 130cm …[店内全品×送料無料]※再販決定★6日19時販売開始!!![SHISKY $マークプリント長袖パーカー スウェット 裏起毛 プルオーバー] 2014 秋新作 110cm 120cm 130cm … [店内全品×送料無料]※再販決定★6日19時販売開始!!![SHISKY