hdu 4520+hdu 4522+hdu 4524(3月24号Tencent)
来源:互联网 发布:淘宝装修拓展编码大全 编辑:程序博客网 时间:2024/05/16 01:13
若菜只会3题,orz,继续刷题吧。。。
hdu 4520:
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4520
思路:就是一个去掉最高分和最低分求平均分,在和原来的分数比较,看哪个裁判最接近。
View Code
1 #include<iostream> 2 #include<cmath> 3 using namespace std; 4 5 int main(){ 6 int n; 7 double num[40]; 8 while(~scanf("%d",&n)&&n){ 9 double max=-1;10 double min=400;11 double sum=0;12 for(int i=0;i<n;i++){13 scanf("%lf",&num[i]);14 if(num[i]<min)min=num[i];15 if(num[i]>max)max=num[i];16 sum+=num[i];17 }18 sum=(sum-min-max)/(n-2);19 int pos=0;20 min=400;21 for(int i=0;i<n;i++){22 if(fabs(sum-num[i])<min){23 min=fabs(sum-num[i]);24 pos=i+1;25 }26 }27 printf("%d\n",pos);28 }29 return 0;30 }
hdu 4522:
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4522
思路:就是求最短路,建两个图,一个是硬座的,一个是卧铺的,然后两次Dijkstra(orz,若菜只会这么干),如果不存在路径,就输出-1,否则,再比较花费。
View Code
1 #include<iostream> 2 #include<cstring> 3 const int N=207; 4 const int inf=1e7; 5 using namespace std; 6 int dist1[N]; 7 int dist0[N]; 8 int visited[N]; 9 int edge1[N][N]; 10 int edge0[N][N]; 11 int n,m,k; 12 13 void Dijkstra1(int u){ 14 memset(visited,0,sizeof(visited)); 15 for(int i=1;i<=n;i++){ 16 dist1[i]=edge1[u][i]; 17 } 18 visited[u]=1; 19 for(int i=1;i<n;i++){ 20 int min=inf,v=u; 21 for(int j=1;j<=n;j++){ 22 if(dist1[j]<min&&!visited[j]){ 23 min=dist1[j]; 24 v=j; 25 } 26 } 27 if(min==inf)return ; 28 visited[v]=1; 29 for(int k=1;k<=n;k++){ 30 if(!visited[k]&&edge1[v][k]<inf&&dist1[v]+edge1[v][k]<dist1[k]){ 31 dist1[k]=dist1[v]+edge1[v][k]; 32 } 33 } 34 } 35 } 36 37 void Dijkstra0(int u){ 38 memset(visited,0,sizeof(visited)); 39 for(int i=1;i<=n;i++){ 40 dist0[i]=edge0[u][i]; 41 } 42 visited[u]=1; 43 for(int i=1;i<n;i++){ 44 int min=inf,v=u; 45 for(int j=1;j<=n;j++){ 46 if(dist0[j]<min&&!visited[j]){ 47 min=dist0[j]; 48 v=j; 49 } 50 } 51 if(min==inf)return ; 52 visited[v]=1; 53 for(int k=1;k<=n;k++){ 54 if(!visited[k]&&edge0[v][k]<inf&&dist0[v]+edge0[v][k]<dist0[k]){ 55 dist0[k]=dist0[v]+edge0[v][k]; 56 } 57 } 58 } 59 } 60 61 62 63 int main(){ 64 int _case; 65 scanf("%d",&_case); 66 while(_case--){ 67 scanf("%d%d",&n,&m); 68 char str[10100]; 69 for(int i=1;i<=n;i++){ 70 for(int j=1;j<=n;j++){ 71 edge1[i][j]=edge1[j][i]=inf; 72 edge0[i][j]=edge0[j][i]=inf; 73 } 74 } 75 for(int i=1;i<=m;i++){ 76 scanf("%s%d",str,&k); 77 int len=strlen(str); 78 int s1=0,s2=0; 79 if(k==1){ 80 for(int j=0;j<len;j++){ 81 //这边一开始没注意到,re了好多次,orz 82 while(str[j]!='+'&&j<len){ 83 s2=s2*10+str[j]-'0'; 84 j++; 85 } 86 edge1[s1][s2]=1;//卧铺的 87 edge0[s1][s2]=1;//硬座的 88 s1=s2; 89 s2=0; 90 } 91 }else if(k==0){ 92 for(int j=0;j<len;j++){ 93 while(str[j]!='+'&&j<len){ 94 s2=s2*10+str[j]-'0'; 95 j++; 96 } 97 edge0[s1][s2]=1;//硬座的 98 s1=s2; 99 s2=0;100 }101 }102 }103 int d1,d2,u,v;104 scanf("%d%d%d%d",&d1,&d2,&u,&v);105 Dijkstra1(u);//开始是卧铺106 Dijkstra0(u);//开始是硬座107 if(dist1[v]==inf&&dist0[v]==inf){108 printf("-1\n");109 }else if(dist1[v]==inf&&dist0[v]<inf){110 printf("%d\n",dist0[v]*d1);111 }else if(dist1[v]<inf&&dist0[v]==inf){112 printf("%d\n",dist1[v]*d2);113 }else {114 printf("%d\n",min(dist1[v]*d2,dist0[v]*d1));115 }116 }117 return 0;118 }
hdu 4524:
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4524
思路:就是最后所有的数都必须为0才能逃离迷宫,直接暴力之。
View Code
1 #include<iostream> 2 using namespace std; 3 int num[1000007]; 4 5 int main(){ 6 int _case; 7 scanf("%d",&_case); 8 while(_case--){ 9 int n;10 scanf("%d",&n);11 for(int i=1;i<=n;i++){12 scanf("%d",&num[i]);13 if(num[i]>=num[i-1]){14 num[i]-=num[i-1];15 num[i-1]=0;16 }17 }18 int flag=0;19 for(int i=1;i<=n;i++){20 if(num[i]){21 flag=1;22 break;23 }24 }25 if(flag){26 printf("I will never go out T_T\n");27 }else 28 printf("yeah~ I escaped ^_^\n");29 }30 return 0;31 }
0 0
- hdu 4520+hdu 4522+hdu 4524(3月24号Tencent)
- hdu 月之数
- HDU 月之数
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- HDU
- HDU
- hdu
- hdu
- HDU
- Hdu
- hdu
- hdu-
- hdu
- hdu 2189
- hdu 1133(卡特兰数)
- hdu 4517
- hdu 4472
- hdu 4474
- hdu 4520+hdu 4522+hdu 4524(3月24号Tencent)
- hdu 1023
- dp学习笔记1
- dp学习笔记2
- hdu 1025(最长非递减子序列的n*log(n)求法)
- 政治局常委:不能用形式主义反对形式主义
- dp学习笔记3
- hdu 1158(很好的一道dp题)
- 程序员用到的软件