20160721考试总结
来源:互联网 发布:淘宝卖家怎么设置运费 编辑:程序博客网 时间:2024/06/05 02:21
第一题:生气的奶牛
题目描述
输入
输出
样例输入
(如果复制到控制台无换行,可以先粘贴到文本编辑器,再复制)
58 10 3 11 1
样例输出
3.0
提示
样例解释:
如果以力度3射击坐标5,则坐标3,坐标8处的干草堆会发生爆炸,然后又会引爆坐标1和坐标10的干草堆,最后引爆坐标11处的干草堆。
二分半径R,难点在于如何用O(n)的时间进行check,先从左往右假设刚好被波及的情况下最多能被波及到哪里,在从右往左来一遍,判断能否把所有草堆波及到。
#include<iostream>#include<cstdio>#include<algorithm>#include<ctime>using namespace std;const int N=50000+10;const double inf=1e24;const double eps=1e-2;int n;double p,pos[N],d[N];bool check(double R){double rmost,lmost;d[1]=0;int j;for(int i=1;i<=n;i=j){if(i==n) return 1;for(j=i+1;pos[j]-pos[i]<=d[i]+1&&j<=n;j++);if(j!=i+1) j--;if(pos[j]-pos[i]>R-1){rmost=pos[i]+R;break ;}d[j]=max(d[i]+1,pos[j]-pos[i]);if(d[i]>R-2&&d[i]<=R-1){rmost=pos[i]+R;break ;}}d[n]=0;for(int i=n;i>=1;i=j){if(i==1) return 1;for(j=i-1;pos[i]-pos[j]<=d[i]+1&&j>=1;j--);if(j!=i-1) j++;if(pos[i]-pos[j]>R-1){lmost=pos[i]-R;break ;}d[j]=max(d[i]+1,pos[i]-pos[j]);if(d[i]>R-2&&d[i]<=R-1){lmost=pos[i]-R;break ;}}return rmost>=lmost;}double devide(double l,double r){if(r-l<=eps) return l;double mid=(l+r)/2.0;if(check(mid)) return devide(l,mid);elsereturn devide(mid,r);}int main(){scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%lf",&pos[i]);sort(pos+1,pos+n+1);printf("%.1lf\n",devide(0,(pos[n]-pos[1])/2));}分数:20
分析:一直在考虑二分+贪心,但想了很多贪心思路又找到了反例,最后完全在乱搞/(ㄒoㄒ)/~~
第二题:无线电通信
题目描述
输入
输出
样例输入
(如果复制到控制台无换行,可以先粘贴到文本编辑器,再复制)
2 73 05 0NNNWWWWWN
样例输出
28
题解:dp[i][j]表示农夫走到i,贝西走到j的最小电量,思路和方程式都和最长公子序列很像。dp[i][j]=min(dp[i-1][j-1],dp[i-1][j],dp[i][j-1])+dis(i->j)^2.#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int N=1000+10;const int inf=0x3f3f3f3f;int n,m,dp[N][N];int posf[N][2],posb[N][2];char strf[N],strb[N];int d[N][2];int dis(int i,int j){return (posf[i][0]-posb[j][0])*(posf[i][0]-posb[j][0])+(posf[i][1]-posb[j][1])*(posf[i][1]-posb[j][1]);}int main(){d['N'][0]=0,d['N'][1]=1;d['S'][0]=0,d['S'][1]=-1;d['W'][0]=-1,d['W'][1]=0;d['E'][0]=1,d['E'][1]=0;scanf("%d %d",&n,&m);scanf("%d %d",&posf[0][0],&posf[0][1]);scanf("%d %d",&posb[0][0],&posb[0][1]);scanf("%s%s",strf+1,strb+1);int len=strlen(strf+1);for(int i=1;i<=len;i++){posf[i][0]=posf[i-1][0]+d[(int)strf[i]][0];posf[i][1]=posf[i-1][1]+d[(int)strf[i]][1];}len=strlen(strb+1);for(int i=1;i<=len;i++){posb[i][0]=posb[i-1][0]+d[(int)strb[i]][0];posb[i][1]=posb[i-1][1]+d[(int)strb[i]][1];}for(int i=0;i<=n;i++)for(int j=0;j<=m;j++)if(i||j){dp[i][j]=inf;if(i&&j) dp[i][j]=min(dp[i][j],dp[i-1][j-1]+dis(i,j));if(i) dp[i][j]=min(dp[i][j],dp[i-1][j]+dis(i,j));if(j) dp[i][j]=min(dp[i][j],dp[i][j-1]+dis(i,j));}printf("%d\n",dp[n][m]);}
成绩:100~\(≧▽≦)/~
分析:明明很水的一道题,理解题意时卡了很久,耽误了很多时间,但幸好最后还是A了(=^ ^=)。
第三题:关灯
题目描述
输入
输出
样例输入
(如果复制到控制台无换行,可以先粘贴到文本编辑器,再复制)
40 00 101 101 0
样例输出
2
提示
#include<iostream>#include<cstdio>#include<algorithm>#include<vector>#include<map>#include<ctime>using namespace std;const int N=200+10;pair<int,int> point[N];map<vector<pair<int,bool> >,int > hash; vector<pair<int,bool> > way;int n,sum[N],Min[N];bool flag[N][N],angle[N];int dis(int i,int j){if(point[i].first==point[j].first)return abs(point[i].second-point[j].second);elsereturn abs(point[i].first-point[j].first);}int lst(int now){return now==1?n:now-1;}int nxt(int now){return now==n?1:now+1;}bool check(int a,int b,int c){pair<int,int> x1=make_pair(point[b].first-point[a].first,point[b].second-point[a].second);pair<int,int> x2=make_pair(point[c].first-point[b].first,point[c].second-point[b].second);return x1.first*x2.second-x1.second*x2.first<0;}void print(vector<pair<int,bool> > q){int siz=q.size();for(int i=0;i<siz;i++)printf("%d %d\n",q[i].first,q[i].second);puts("------------------");}int main(){//freopen("1.in","r",stdin);//freopen("1.out","w",stdout);scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d %d",&point[i].first,&point[i].second);if(i>1) sum[i]=sum[i-1]+dis(i-1,i);}for(int i=1;i<=n;i++){Min[i]=min(sum[i],sum[n]-sum[i]+dis(1,n));angle[i]=check(lst(i),i,nxt(i));}//puts("------------------");int ans=0;for(int i=2;i<=n;i++){way.clear();way.push_back(make_pair(0,angle[i]));for(int j=i;j<n;j++){way.push_back(make_pair(dis(j,nxt(j)),angle[nxt(j)]));//printf("from %d to %d:\n",i,j);//print(way);hash[way]++;}}//puts("***************");for(int i=2;i<=n;i++){way.clear();way.push_back(make_pair(0,angle[i]));for(int j=i;j<n;j++){way.push_back(make_pair(dis(j,nxt(j)),angle[nxt(j)]));//printf("from %d to %d\n",i,j);//print(way);if(hash[way]==1){ans=max(ans,sum[nxt(j)]-sum[i]+Min[nxt(j)]-Min[i]);break ;}//else printf("----%d\n",hash[way]);}}printf("%d\n",ans);}/*60 00 11 11 22 22 0*//*80 00 11 11 22 22 13 13 0*/成绩:20 o(>﹏<)o
分析:在理解顺时针时想太复杂,用n^4算角度qnq,TLE。。O__O"…。主要还是时间太紧根本没细想。
第四题:分梨子
题目描述
输入
输出
样例输入
(如果复制到控制台无换行,可以先粘贴到文本编辑器,再复制)
32 3 63 21 12 1
样例输出
2
题解:n^3枚举a0和b0再每个点check能否被选中,把每个梨子看成一个点,A和B分别为x和y坐标,然后就可以线性规划,枚举Ai,从下往上枚举Bi,需要统计的就是直角边为C3的直角三角形内有多少个点。这个代码参照了标程。
#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>using namespace std;const int N=2000+10;struct node{int pos,val;bool operator < (const node &x)const{return val<x.val;}}Y[N],K[N];int n,A[N],B[N],dp[N];int c1,c2,c3;int main(){scanf("%d",&n);scanf("%d %d %d",&c1,&c2,&c3);for(int i=1;i<=n;i++){scanf("%d %d",&A[i],&B[i]);Y[i].pos=K[i].pos=i;K[i].val=A[i]*c1+B[i]*c2-c3;Y[i].val=B[i];}sort(K+1,K+n+1),sort(Y+1,Y+n+1);int ans=0;for(int i=1;i<=n;i++){memset(dp,0,sizeof dp);int k=0,sum=0;for(int j=1;j<=n;j++){while(k<=n&&K[k].val<=A[i]*c1+Y[j].val*c2){if(A[K[k].pos]>=A[i]&&B[K[k].pos]>=Y[j].val) sum++,dp[B[K[k].pos]]++; k++;}sum-=dp[Y[j-1].val],dp[Y[j-1].val]=0; ans=max(ans,sum);}}printf("%d\n",ans);}
成绩:20
分析:这道题确实比较难,完全没有想出正解,考试时想简单了,甚至n^3的算法都没写出来还是很遗憾的TAT。
总结:考得挺炸的,与其他人的差距基本就是第一题o(╯□╰)o,在考试时第一题卡了很久,但60分的贪心都没有想出来/(ㄒoㄒ)/~~,耽误的很多时间,其实当时应该跳过过一会在回来看可能会好一些,毕竟现在想起来当时完全陷入错误思路无法自拔O__O"…,然后就是二三题在理解题意上有点尴尬%>_<%,第四题完全没有时间,如果冷静一下的话,n^3的算法应该是没有什么问题的。可能还是太久没有考试了,实际考试和原题检测差距还是很大的,发挥和状态还有策略上都有一定的失误,但卡在第一题还是自己太水了QnQ。。233333333333
- 20160721考试总结
- 考试总结
- 考试总结
- 考试总结
- 考试总结
- 考试总结
- 考试总结
- 考试总结
- 考试总结
- 考试总结
- 考试总结
- 考试总结
- 考试总结
- 考试总结
- 考试总结
- 考试总结
- 考试总结
- 考试总结
- C# winform打印RDLC
- ModelAndView详解
- android_视频播放器(VideoView)
- 反转链表
- LeetCode | 63. Unique Paths II
- 20160721考试总结
- VIM实用技巧
- 红黑树
- 昝辉SEO告诉你:SEO是什么鬼
- HDU
- 对象的思维
- Nexus3搭建Maven私有库(五)
- BZOJ 2049: [Sdoi2008]Cave 洞穴勘测 LCT題解
- 面向对象 第二天(学的有点晕)