• hdu 4520+hdu 4522+hdu 4524(3月24号Tencent)


    若菜只会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 }
  • 相关阅读:
    中序遍历【递归算法】和【非递归算法】
    等价无穷小替换
    轮转访问MAC协议
    曲率
    Java I/O流 01
    Java 集合框架 04
    Java 集合框架 03
    Java 集合框架 02
    Java 集合框架 01
    Java 常见对象 05
  • 原文地址:https://www.cnblogs.com/wally/p/2980601.html
Copyright © 2020-2023  润新知