本文主要是介绍上海邀请赛之热身赛2_2013成都邀请赛,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
先写总结。
感觉这次跟scf和sjc组队有种瞬间碉堡了的感觉,虽然是临时组建的队伍凑齐准备去上海参加邀请赛,从这次比赛磨练配合。
今天比赛难度比前天那次的难度低,感觉更适合我们来练习。
话说好像比赛提早了5分钟,我们三个人都不知道,五分钟后一看A题学长已经A了,一想肯定特水。。。我就没看题,sjc和scf两个看了题,scf就开始敲了,我刚开始负责翻译题,虽然我英语是个渣渣。。。没办法,没翻译他们几乎做不出题。。。我就没做题,翻译了B和G。scf敲了貌似好久才完成(赛后重做,特水,基本3分钟就可以出题)。我翻译完B和G,sjc开始想思路,这是已经有出L题,我也没看题,scf直接看题敲了,一次wa,就让我翻译L题(没翻译完就敢做。。。),接着少了“case”。。。一会也A了,sjc说G是找规律,于是scf和sjc两人就找规律去了,我一人想B,等scf开始敲G题,我跟sjc说了B的思路,他也觉得应该可以。。。(其实翻译错题意了。。。)趁着scf敲G题,我又翻译了几题,手里积累了好几题,感觉都是可做的,sjc一个人积了K和B,scf自己调试G题,我自己看了E题,几何,又跟sjc交流了下,感觉可以套模板。。。找了模板上机敲了。。。
貌似敲得太久,scf调试完了也要机子,只好先让他敲。。。G题错了3次也A了。。。我又继续敲模板,一会又让给sjc敲B题,自己构思E。结果sjc的B题错了,大家才觉得翻译错了。。。榜上好像还没人出B。。。我继续敲E。scj和scf两人就讨论K,我敲完E貌似测试一直错了,让sjc敲K题,自己才发现少考虑情况了,而且连模板都敲错了,家才K题出来了就是WA,scf说是翻译错了数据范围,还真是,于是又讨论去了,我也敲了E题,结果忘了注释给错了一次。。。后来的好久就看sjc敲K题,其他题都没有出的。。。
N久后K题顺利过了,排名瞬间上去了,那感觉。。。最后一个小时,scj找了一题DP的题,我和scf看了一题图论的,我一开始感觉可行,上机敲了一些,就感觉可能超内存,scf说可能超时,结果就放弃了。。。最后是5题结束,感觉世界都萌萌哒了。。。
第一次和scf,sjc配合,出乎意料的好,不过暴露了一些小问题,scf罚时太多。。。自己也忘了注释。。。还有翻译。。。
下面是部分题的题解。。。
Ahttp://acm.hdu.edu.cn/showproblem.php?pid=4716
A题我还是贴我的代码吧,不吐槽scf了。。。一水。。。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>using namespace std;int main()
{int t,k=1,n,i;scanf("%d",&t);while(t--){scanf("%d",&n);printf("Case #%d:\n",k++);printf("*------------*\n");for(i=0;i<10-n/10;i++){printf("|............|\n");}for(i=0;i<n/10;i++)printf("|------------|\n");printf("*------------*\n");}return 0;
}
Ehttp://acm.hdu.edu.cn/showproblem.php?pid=4720
几何模板题,求最小圆覆盖,要分情况讨论,当三角形是锐角最小圆就是外接圆,如果三角形是钝角,最小圆就是以最大边为直径的圆。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
struct Point
{double x;double y;
} pt[1005];
struct Circle
{struct Point center;double r;
};
struct Traingle
{struct Point p[3];
};
double Dis(struct Point p,struct Point q)
{double dx=p.x-q.x;double dy=p.y-q.y;return sqrt(dx*dx+dy*dy);
}
double Area(struct Traingle ct)
{return fabs((ct.p[1].x-ct.p[0].x)*(ct.p[2].y-ct.p[0].y)-(ct.p[2].x-ct.p[0].x)*(ct.p[1].y-ct.p[0].y))/2.0;
}
struct Circle CircumCircle(struct Traingle t)
{struct Circle tmp;double a,b,c,c1,c2;double xA,yA,xB,yB,xC,yC;a=Dis(t.p[0],t.p[1]);b=Dis(t.p[1],t.p[2]);c=Dis(t.p[2],t.p[0]);tmp.r=(a*b*c)/(Area(t)*4.0);xA=t.p[0].x;yA=t.p[0].y;xB=t.p[1].x;yB=t.p[1].y;xC=t.p[2].x;yC=t.p[2].y;c1=(xA*xA+yA*yA-xB*xB-yB*yB)/2.0;c2=(xA*xA+yA*yA-xC*xC-yC*yC)/2.0;tmp.center.x=(c1*(yA-yC)-c2*(yA-yB))/((xA-xB)*(yA-yC)-(xA-xC)*(yA-yB));tmp.center.y=(c1*(xA-xC)-c2*(xA-xB))/((yA-yB)*(xA-xC)-(yA-yC)*(xA-xB));return tmp;
};
int main()
{struct Traingle tt;Point qq;Circle cc;double l1,l2,l3;int t,k=1;scanf("%d",&t);while(t--){scanf("%lf %lf",&tt.p[0].x,&tt.p[0].y);scanf("%lf %lf",&tt.p[1].x,&tt.p[1].y);scanf("%lf %lf",&tt.p[2].x,&tt.p[2].y);scanf("%lf %lf",&qq.x,&qq.y);l1=Dis(tt.p[0],tt.p[1]);l2=Dis(tt.p[0],tt.p[2]);l3=Dis(tt.p[2],tt.p[1]);if(((l1*l1)+(l2*l2)<(l3*l3))||((l3*l3)+(l2*l2)<(l1*l1))||((l1*l1)+(l3*l3)<(l2*l2))){if(((l1*l1)+(l2*l2)<(l3*l3))){cc.r=l3/2.0;cc.center.x=(tt.p[1].x+tt.p[2].x)/2.0;cc.center.y=(tt.p[1].y+tt.p[2].y)/2.0;}else if(((l3*l3)+(l2*l2)<(l1*l1))){cc.r=l1/2.0;cc.center.x=(tt.p[1].x+tt.p[0].x)/2.0;cc.center.y=(tt.p[1].y+tt.p[0].y)/2.0;}else if(((l1*l1)+(l3*l3)<(l2*l2))){cc.r=l2/2.0;cc.center.x=(tt.p[0].x+tt.p[2].x)/2.0;cc.center.y=(tt.p[0].y+tt.p[2].y)/2.0;}}else{cc=CircumCircle(tt);}//printf("%.2lf %.2lf\n",cc.center.x,cc.center.y);//printf("%.2lf %.2lf\n",cc.r,Dis(qq,cc.center));printf("Case #%d: ",k++);if(Dis(qq,cc.center)<=cc.r)printf("Danger\n");else printf("Safe\n");}return 0;
}
Khttp://acm.hdu.edu.cn/showproblem.php?pid=4726
两个规则,1是加法不进位,2是数中任意位可以对掉,不出现前导零的情况。
贪心,第一次只能取非零的最大。
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
char str1[2000000] ;
char str2[2000000] ;
int main()
{int k , i , j , l ;int s1[11] , s2[11] , ss[11] ;int t , tt ;scanf("%d", &t);for(tt = 1 ; tt <= t ; tt++){memset(s1,0,sizeof(s1));memset(s2,0,sizeof(s1));memset(ss,0,sizeof(ss));scanf("%s%s", str1, str2);l = strlen(str1) ;for(i = 0 ; i < l ; i++){s1[ str1[i]-'0' ]++ ;s2[ str2[i]-'0' ]++ ;}if( l == 1 && ( s1[0] == 1 || s2[0] == 1 ) ){if(s1[0] == 1){printf("Case #%d: %c\n", tt, str2[0]);}else{printf("Case #%d: %c\n", tt, str1[0]);}continue ;}printf("Case #%d: ", tt);int mm = -1 , m , mi , mj ;for(i = 1 ; i <= 9 ; i++)for(j = 1 ; j <= 9 ; j++){if( s1[i] && s2[j] ){m = i + j ;m %= 10 ;if(m >mm){mm = m ;mi = i ;mj = j ;}}}printf("%d", mm);if(mm == 0){printf("\n");continue ;}s1[mi]-- ;s2[mj]-- ;for(k = 9 ; k >= 0 ; k--){if(k == 7)k = 7 ;for(i = 0 ; i <= 9 ; i++)for(j = 0 ; j <= 9 ; j++){if( s1[i] && s2[j] && (i+j)%10 == k ){m = min(s1[i],s2[j]) ;ss[k] += m ;s1[i] -= m ;s2[j] -= m ;}}}for(i = 9 ; i >= 0 ; i--){for( j = ss[i] ; j > 0 ; j--){printf("%d", i) ;}}printf("\n");}return 0;
}
L http://acm.hdu.edu.cn/showproblem.php?pid=4727
貌似也是水题,赛后我做的时候用cin竟然超时了。。。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>using namespace std;
int t,n,k=1,num[100010];
int main()
{int i,j;scanf("%d",&t);while(t--){scanf("%d",&n);for(i=0; i<n; i++)scanf("%d",&num[i]);printf("Case #%d: ",k++);int x=0,p;for(i=1; i<n; i++){if(num[i]!=num[i-1]+1){p=i+1;x++;}}if(x!=1)printf("1\n");else printf("%d\n",p);}return 0;
}
这篇关于上海邀请赛之热身赛2_2013成都邀请赛的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!