2月4号 集训第四天

一.结构体排序

对char 和int 类型的排序

#include<iostream>

namespace using std;

typedef struct {        

char a[10];

b

}c;

int compart(void *e, void *d){

  return strcmp(((c*)e)->a,((c*)d)->b);

}

int main(){

   c array[55];

qsort (array,55, sizeof(c),compare);

return 0;

}           

顺带   sort与qsort区别   sort 是sort(bigin,end) , qsort是qsort(首地址,元素数量,个元素占用空间大小,用于比较的指针)

带上一题学长代码(暂时看不懂)也是类似于先排名字再排数字 ---HDU5131 

  #include <cstdio>

#include <cstring>

#include <algorithm>

#include <algorithm>

#include <string>

#include <map>

#include <iostream>

#include <vector>
using namespace std;
int n ;
struct node{
    string name ;
    int v ;
    node(string name_,int v_){
        name = name_ ;
        v = v_;
    }
    friend bool operator < (const node &a , const node &b){
        if (a.v != b.v) return a.v > b.v ;
        return a.name < b.name ;
    }
};
vector<node> a ;
map<string,int> sum ;
char str[50] , name[50] ;
int x ;
int main(){
    //freopen("input.txt","r",stdin);
    while (~scanf("%d",&n) && n){
        a.clear() ; sum.clear() ;
        for (int i = 0 ; i < n ; i++){
            scanf("%s%d",str,&x) ;
            a.push_back(node((string)str , x)) ;
            sum[str] = x;
        }
        sort(a.begin() , a.end()) ;
        for (int i = 0 ; i < a.size() ; i++)
            cout << a[i].name << " " << a[i].v << endl ;
        int m ; scanf("%d",&m) ;
        while (m--){
            scanf("%s",name) ;
            int find = sum[name] ;
            int major = 1 , minor = 1 ;
            for (int i = 0 ; i < a.size() ; i++){
                if (a[i].v > find) major++ ;
                else if (a[i].v == find && a[i].name < name) minor++ ;
            }
            if (minor == 1) printf("%d\n",major);
            else printf("%d %d\n",major,minor) ;
        }
    }
    return 0;

二.

高精度加法

#include<stdio.h>

#include<string.h>

int sum[150];

void add(char *a){

  int len = strlen(a);

  int k = 1;

for(int  i = len -1; i>= 0; i--){

  sum[k] += a[i] - '0';

  sum[k+1] += sum[k] /10;

  sum[k] %= 10;

   k++;

        }

}

int main(){

  char a[150][150];

   int i; 

   for(int i = 0; ;i ++){

  gets(a[i]);

  int n = strlen(a[i]);

   if(n==1&&a[i][0] == '0')   break;

  add[i];

}

int flag = 0;

for(int i = 149; i >=1; i--){

   if(flag == 0&& sum[i] == 0)  continue;

else {

   flag = 1;

  printf("%d", sum[i]); 

       }

    }

return 0;

}    ---------------高精度乘法以后补上

三.

sort 的具体用途  

用来排序结合贪心 

例  UVA 11292  fire-breathing dragon(看图怎么像大黄鸭- -||)

#include<cstdio> ---------C++函数还不是很清楚..头文件写的比较多怕少了

#include<cstdib>

#include<cmath>

#include<algorithm>

using namespace std;

int w[20005],v[20005],dp[20005];

int main(){

int n, m;

while(~scanf("%d%d", &n , &m)){

     int cost = 0;

  for(int i = 0; i < n; i++){

  scanf("%d", &w[i]);

}

for(int i = 0; i < m; i++){

scanf("%d", &v[i]);

}

sort(w,w+n);

sort(v,v+m);

if( n > m) {printf("Loowater is doomed!\n");  continiu;}

int index = 0, flag = 0;

for(int i = 0; i < n; i++){

   while(w[i] > v[index]){

      index ++;

}

cost += v[index];

index++;

flag++;

if(index > m )   break;

  }

if(index == n ) 

printf("%d\n",cost);

else printf("Loowater is doomed!\n");

   }
return 0;

就是排序,从小到大让knight 从小到大跟head去打,用while语句来使knight能打得过,如果超过了m人数,说明打不过了.

留下一个问题,以后解决

  POJ 2739 

Sum of Consecutive Prime Numbers

最后留下一道被坑的- -题目没看清楚

humidex ---POJ 3299

#include<cstdio>
#include<cmath>
using namespace std;
#define exp 2.718281828
int main(){
    double a,b,c,d,e,f,temperature, humidex, h,dewpoint;
    char n,m,p,q;
    while(~scanf("%c",&n)){
        if(n == 'E') break;
    scanf("%lf %c %lf", &a, &m, &b);
    getchar();
    if( n == 'T' && m == 'D'){
            e = 6.11 * pow (exp,(5417.7530 * ((1/273.16) - (1/(b+273.16)))));
            h  = (0.5555) * (e - 10.0);
           humidex = a  + h;
           printf("T %.1lf D %.1lf H %.1lf\n", a, b, humidex);
    }
    else if( n == 'D'&& m == 'T'){
            e = 6.11 * pow(exp, (5417.7530*((1/273.16) - (1/(a + 273.16)))));
            h = (0.5555) * ( e - 10.0);
            humidex = b + h;
            printf("T %.1lf D %.1lf H %.1lf\n", b, a, humidex);
    }
    else if(n == 'T' &&m == 'H'){
      h = b - a;
       e = 1.0*h/0.5555 + 10.0;
       dewpoint = 1/(-(log(e/6.11)/5417.7530 - 1/273.16))-273.16;
       printf("T %.1lf D %.1lf H %.1lf\n", a,dewpoint, b);
    }
    else if(n == 'H' && m =='T'){
     h = a - b;
       e = h/0.5555 + 10.0;
        dewpoint = 1/(-(log(e/6.11)/5417.7530 - 1/273.16))-273.16;
        printf("T %.1lf D %.1lf H %.1lf\n", b, dewpoint, a);
    }
    else if(n == 'D' && m == 'H'){
    e = 6.11* pow(exp, (5417.7530*((1/273.16) - (1/(a + 273.16)))));
    h = (0.5555)*(e - 10.0);
    temperature = b - h;
    printf("T %.1lf D %.1lf H %.1lf\n", temperature, a , b);
    }
    else if(n == 'H' && m == 'D'){
    e = 6.11*pow(exp,(5417.7530*((1/273.16) - (1/(b+273.16)))));
    h = (0.5555)*(e- 10.0);
    temperature = a  - h;
    printf("T %.1lf D %.1lf H %.1lf\n",temperature,b,a);
    }
    }
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值