PAT.1035-1045
来源:互联网 发布:软件测试项目管理 编辑:程序博客网 时间:2024/06/05 21:50
早期代码使用 java , 后转c/c++。由于使用java代码的都是比较基础的题目,因此未贴出java代码。
1035. Password (20)
原题地址:http://www.patest.cn/contests/pat-a-practise/1035
解题思路:简单字符串替换。
1036. Boys vs Girls (25)
原题地址:http://www.patest.cn/contests/pat-a-practise/1036
解题思路:分别保存boy和girl的分数最值。
1037. Magic Coupon (25)
原题地址:http://www.patest.cn/contests/pat-a-practise/1037
解题思路:先排序,然后依次正值和正值相乘,负值和负值相乘。
代码如下:
#include <stdio.h>#include <iostream>#include <algorithm>#include <vector>using namespace std;int main(){ int cmp(const void*,const void*); int n,m;//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!// freopen("input.txt","r",stdin);//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! scanf("%d",&n); int *v1 = new int[n]; for(int i=0;i<n;i++){ scanf("%d",(v1+i)); } scanf("%d",&m); int *v2 = new int[m]; for(int i=0;i<m;i++){ scanf("%d",(v2+i)); } int count = 0; sort(v1,v1+n); sort(v2,v2+m); for(int i=0;i<m&&i<n;++i){ if(v1[i]>0||v2[i]>0) break; count += v1[i]*v2[i]; } for(int i=n-1,j=m-1;i>=0&&j>=0;--i,--j){ if(v1[i]<0||v2[j]<0) break; count += v1[i]*v2[j]; } // printf("%d:%d:%d:%d\n",v1[0],v1[1],v1[2],v1[3]); printf("%d\n",count); return 0;}
1038. Recover the Smallest Number (30)
原题地址:http://www.patest.cn/contests/pat-a-practise/1038
解题思路:对于数A和数B,若AB > BA, 定义 A > B。 可以证明,这种比较规则的有效性:自反性,对称性,传递性。 因此按照定义的规则对数组排序即可。(详见《剑指offer(纪念版)》 面试题33)
代码如下:
#include <stdio.h>#include <iostream>#include <algorithm>#include <cstring>#include <cstring>using namespace std;struct num{ char s[15];}name[10005];bool cmp(const struct num &a,const struct num &b){ char ta[30],tb[30]; strcpy(ta,a.s); strcpy(tb,b.s); strcat(ta,b.s); strcat(tb,a.s); return strcmp(ta,tb)<0;}int main(){ int n;// int cmp(const struct num,const struct num);// freopen("input.txt","r",stdin); scanf("%d",&n); for(int i=0;i<n;i++){ scanf("%s",name[i].s); } sort(name,name+n,cmp); bool flag = true; for(int i=0;i<n;i++){ char* number = name[i].s; for(int j=0;number[j]!= '\0';j++){ if(flag && number[j]=='0') continue; flag = false; printf("%c",number[j]); } } if(flag){ printf("0\n"); } return 0;}
1039. Course List for Student (25)
原题地址:http://www.patest.cn/contests/pat-a-practise/1039
解题思路:由于map对字符串处理比较慢,因此根据学生名特点自定义一个映射关系,把学生名映射到数组里。
代码如下:
#include <stdio.h>#include <vector>#include <cstring>#include <algorithm>#define MAXN 26*26*26*10+5using namespace std;/*==================================!!!! cin is slow; map is slow!!!!!!!==================================*/ vector<int> smap[MAXN];int N,K;int hashName(const char* name){ return (name[0] - 'A') * 26 * 26 * 10\ + (name[1] - 'A') * 26 * 10\ + (name[2] - 'A') * 10\ + (name[3] - '0');}int main(){// freopen("1039.txt","r",stdin); scanf("%d%d",&N,&K); for(int i = 0; i < K; i++){ int cid, sn; scanf("%d%d",&cid,&sn); for(int j = 0; j < sn; j++){ char name[5]; scanf("%s",name); smap[hashName(name)].push_back(cid); } } for(int i = 0; i < N; i++){ char name[5]; scanf("%s",name); int hname = hashName(name); int msize = smap[hname].size(); sort(smap[hname].begin(),smap[hname].end()); printf("%s %d",name,msize); for(int i = 0; i < msize; i++){ printf(" %d",smap[hname][i]); } printf("\n"); } return 0;}
1040. Longest Symmetric String (25)
原题地址:http://www.patest.cn/contests/pat-a-practise/1040
解题思路:想不出好办法。暴力找以每一位为中心向两边展开得到的对称字符串的长度。注意字符串长为奇数和偶数的区别。(网上有动态规划的方法)
代码如下:
#include <stdio.h>#include <cstring>#include <algorithm>#define MAXN 1005char mes[MAXN];int len;int maxN;int maxT;int isSym(const char *a, int s){ if(s > len) return 1; if(s%2 == 0){ for(int i = s/2; (i + s/2)<= len; i++){ int flag = 0; for(int t = 0; t < s/2; t++) if(a[i-t-1] != a[i+t]){ flag = 1; break; } if(flag) continue; return 0; } }else{ for(int i = s/2; (i + s/2)< len; i++){ int flag = 0; for(int t = 1; t <= s/2; t++) if(a[i-t] != a[i+t]){ flag = 1; break; } if(flag) continue; return 0; } } return 1;}int main(){// freopen("1040.txt","r",stdin); gets(mes); len = strlen(mes); int flag = 0; maxN = 2; maxT = 1; while(!flag){ int a = isSym(mes, maxN); int b = isSym(mes, maxN+1); if(!a) maxT = maxN; if(!b) maxT = maxN; maxN++; if(a*b) flag = 1; } printf("%d",maxT); return 0; }
1041. Be Unique (20)
原题地址:http://www.patest.cn/contests/pat-a-practise/1041
解题思路:用数组记录每个数字出现的次数。再对数据依次查询,找出现次数为1的数。
1042. Shuffling Machine (20)
原题地址:http://www.patest.cn/contests/pat-a-practise/1042
结题思路:按照规则交换数组元素即可。
代码如下:
#include <cstdio>#include <cstring>#define MAXN 54int pre[MAXN];int cur[MAXN];int ord[MAXN];int k;int main(){// freopen("1042.txt","r",stdin); int flag = 1; scanf("%d",&k); for(int i = 0; i < MAXN; i++){ scanf("%d",&ord[i]); pre[i] = i;} for(int i = 0; i < MAXN; i++){ int index = i; for(int j = 0; j < k; j++) index = ord[index] - 1; cur[index] = pre[i]; } char c; int f = 1; for(int i = 0; i < MAXN; i++){ if(cur[i]/13 == 0) c = 'S'; else if(cur[i]/13 == 1) c = 'H'; else if(cur[i]/13 == 2) c = 'C'; else if(cur[i]/13 == 3) c = 'D'; else c = 'J'; if(f) f = 0; else printf(" "); printf("%c%d", c, cur[i]%13+1); } return 0;}
1043. Is It a Binary Search Tree (25)
原题地址:http://www.patest.cn/contests/pat-a-practise/1043
解题思路:按照前序遍历构造BST,过程中检查是否为BST。
代码如下:
#include <cstdio>#include <cstring>#include <algorithm>#define MAXN 1005int left[MAXN];int right[MAXN];int val[MAXN];int data[MAXN];int p;int N;int isBST(int s, int t){ int f = s; int i; if(s >= t ) return 1; for(i = s+1; i < t; i++){ if(data[s] <= data[i]) break; } f = i; for(;i < t; i++){ if(data[s] > data[i]) return 0; } if(s+1 < f) left[s] = s+1; if(s < f && f < t) right[s] = f; return isBST(s+1,f)&&isBST(f,t);}int ismBST(int s, int t){ int f = s; int i; if(s >=t ) return 1; for(i = s+1; i < t; i++){ if(data[s] > data[i]) break; } f = i; for(;i < t; i++){ if(data[s] <= data[i]) return 0; } if(s+1 < f) left[s] = s+1; if(s<f && f < t) right[s] = f; return ismBST(s+1,f)&&ismBST(f,t);}void showVal(int r){ if(left[r] != -1) showVal(left[r]); if(right[r] != -1) showVal(right[r]); if(p) p = 0; else printf(" "); printf("%d",data[r]);}int main(){ memset(left,-1,sizeof(left)); memset(right,-1,sizeof(right)); memset(val,0,sizeof(val)); // freopen("1043.txt","r",stdin); scanf("%d",&N); for(int i = 0; i < N; i++) scanf("%d",data+i); int f1 = isBST(0,N); int f2 = 0; if(!f1) f2 = ismBST(0,N); if(f1 || f2){ printf("YES\n"); p = 1; showVal(0); }else printf("NO\n"); return 0;}
1044. Shopping in Mars (25)
原题地址:http://www.patest.cn/contests/pat-a-practise/1044
解题思路:窗口法查找数组连续元素和。
代码如下:
#include <cstdio>#include <cstring>#include <algorithm>#include <vector>#define MAXN 100005using namespace std;int data[MAXN];int maxC[MAXN];int des[MAXN];int N;int M;int ma;vector<int> v;int mmax(int i, int j){ if(i > j) return i; else return j;}int main(){// freopen("1044.txt","r",stdin); memset(maxC,0,sizeof(maxC)); scanf("%d%d",&N,&M); for(int i = 0 ; i < N; i++) scanf("%d",data+i); ma = 100000010; int pr = 0; int mt = 0; for(int i = 0; i < N; i++){ for(int j = mmax(pr,i); j < N; j++){ mt += data[j];// printf("%d-%d : %d\n",i+1,j+1,mt); if(mt >= M){ pr = j; if(mt < ma){ ma = mt; v.clear(); v.push_back(i);} else if(mt == ma) v.push_back(i); des[i] = j; break; } } if(mt < M) break; else { mt -= data[i]; if(pr > i) mt = mt - data[pr]; } } for(int i = 0 ; i < v.size(); i++){ printf("%d-%d\n",v[i]+1,des[v[i]]+1); } }
1045. Favorite Color Stripe (30)
原题地址:http://www.patest.cn/contests/pat-a-practise/1045
解题思路:求非减最大子数组,动态规划。
代码如下:
#include<cstdio> #include<iostream> #include<cstring> #include<cmath> #include<string> #include<vector> #include<map> #include<set> #include<algorithm> #include<sstream> using namespace std; int dp[10005]; int num[205]; int stripe[10005]; int main() { // freopen("1045.txt","r",stdin); int n,m,k,ans,x; memset(num,-1,sizeof(num)); scanf("%d",&n); scanf("%d",&m); for(int i=1; i<=m; ++i) { scanf("%d",&x); num[x]=i; } scanf("%d",&k); for(int i=1; i<=k; ++i) { scanf("%d",&x); stripe[i]=num[x]; } for(int i=1; i<=k; ++i) { if(stripe[i]>0) dp[i]=1; else dp[i]=0; } for(int i=2; i<=k; ++i) { if(stripe[i]==-1) dp[i]=0; else { for(int j=1; j<i; ++j) if(stripe[i]>=stripe[j]) dp[i]=max(dp[i],dp[j]+1); } } ans=0; for(int i=1; i<=k; ++i) if(dp[i]>ans) ans=dp[i]; printf("%d\n",ans); return 0; }
解题思路:简单字符串替换。
代码如下:
0 0
- PAT.1035-1045
- PAT 1035
- PAT 1035
- pat 1045
- pat 1045
- pat 1045
- pat 1035 Password
- PAT(A) 1035
- PAT 1035 Password
- pat-advanced(1035-1038)
- PAT Advanced 1035
- PAT(甲级)1035
- 浙大PAT甲级 1035
- PAT A 1035
- PAT甲级1035
- PAT乙级1035
- pat-bl-1035
- PAT BASIC 1035
- 好的学习资源链接 ,持续更新....
- [MySQL FAQ]系列 — 为什么InnoDB表要建议用自增列做主键
- KSDKV1.2 学习
- bootstrap之表格篇--随记
- viewPager实现图片左右滑动
- PAT.1035-1045
- DirectShow下视频显示窗口设置
- Android开发之EditText属性详解
- 分享一个ip地址库,有免费的
- js 一句代码string转date
- [CTS Verifier]Notification Package Priority Test
- 去掉android中的标题显示
- oracle11g中ASM磁盘组的mount
- DSOframer 微软官方API的查阅方法