nothing for nothing(三)

觉醒!MACROSS!点击打开链接

题目大意就要消灭以原点为中心的周围的所有敌人,并且花费的代价最小(就是开炮的次数最小),大炮360度无死角开炮。

解题思路该题就是求到原点的距离最大的点作为半径开炮,这么做可以消灭所有的敌人,花费的代价比较小。所以先把所有点到原点的距离用数组存起来,然后排序,输出最大的一个就行了

#include<stdio.h>
#include<iostream>
#include<string.h>
#include<algorithm>
#include<math.h>
using namespace std;
double fun(double x, double y, double z){//到原点的距离公式
       double sum = x * x + y * y + z * z;
       return pow(sum , 1.0/2);//pow(float,float)形式,别忘了1.0,否则会默认为整型,就是sum的0次方也就是1

}
double account[100005];
int main(){
    int T;
    scanf("%d", &T);
    while(T--){
        int n;
        scanf("%d", &n);
        int i;
        double  x, y, z;
        for(i = 0; i < n; i++){
            scanf("%lf %lf %lf", &x, &y, &z);
            double t = fun(x, y, z);
            account[i] = t;
        }
        sort(account, account+ n);//排序
        printf("%.2lf\n", account[n-1]);//输出最大的一个

    }
return 0;
}

航行日志的修复       点击打开链接

本题的题意我也是没有看明白,但是后来通过样例来推断初出来的,大概意思就是给以一段乱码,但是乱码有自己的规律,然后让你把这段乱码转译一下。

思路就是以小写a-z为例,如果这个字母的ASCII减去11还在a-z之内,那么这个字母的转译就是这个字母的ASCII码减去11对应的字母,否则就这个字母的ASCII值加15然后输出,大写字母同样的道理。在说标点符号,如果标点符号是“{”、“[”、“(”,就输出“,”,如果是“]”、“)”、“}”(为什么“[]"也算在标点符号中,我是进行合情推理,删掉好不好用我还不知道)就是输出“.”。剩下的符号就任意符号就输出空格。

#include<stdio.h>
#include<iostream>
#include<string.h>
#include<algorithm>
#include<math.h>
using namespace std;
int main()
{
    string a;
    while(cin>>a)
    {
        int i;
        for(i = 0; i < a.size(); i++)
        {
            if(a[i] >= 97 && a[i] <= 122)//a-z
            {
                int t = a[i] - 11;
                if((t >= 97 && t <= 111) )//减去11之后判断如果还是属于a-z
                    printf("%c", t);
                else printf("%c",a[i] +15);//不属于a-z

            }
            else if(a[i] >= 65 && a[i] <= 90)//A_Z
            {
                int t = a[i] - 11;
                if((t >= 65 && t <= 79 ) )
                    printf("%c", t);
                else printf("%c", a[i] + 15);
            }
            else if(a[i] == '(' || a[i] == '{' || a[i] == '[')printf(",");//“,”
            else if(a[i] == ')'|| a[i] == '}' || a[i] == ']')printf(".");//“.”
            else printf(" ");//其他的就是空格
        }
        printf("\n");

    }

    return 0;
}

Lunch War with the Donkey    点击打开链接

这题就是王境泽想喝掉牛奶和面包,只有牛奶或者只有面包境泽不会喝的,比较有脾气,喝的时候牛奶和面包都是有价值的,问境泽怎么干掉面包和牛奶价值最大。

思路就是把牛奶和面包的价值排序,最大价值就是牛奶的最大价值乘以面包的最大价值,牛奶第二大的价值乘以面包第二的价值。。。以此类推。

#include<stdio.h>
#include<iostream>
#include<string.h>
#include<algorithm>
#include<math.h>
using namespace std;

int a[100006], b[100006];
int main()
{
    int n, m;
    while(~scanf("%d %d", &n, &m))
    {
        int i, j;
        for(i = 0; i < n; i++)scanf("%d", &a[i]);
        for(i = 0; i < m; i++)scanf("%d", &b[i]);
        sort(a, a+n);//排序
        sort(b, b+m);
        long long max1 = 0, sum = 0;//记录最大价值和最小价值之和
        int len = abs(n - m);//牛奶和面包的个数差
        if(n >= m)
        {
            for(i = 0; i < m ; i++)
            {

                max1 += (a[i+len] * b[i]);

                sum += a[i] * b[m - i - 1];

            }
        }
        else
        {
            for(i = 0; i < n ; i++)
            {

                max1 += (a[i] * b[len+i]);
                sum = sum + (a[n-i-1]*b[i]);

            }

        }
        printf("%lld %lld\n", max1, sum);//这个得特别注意,容易愚蠢,然后就zz了,这是%lld,不是%d
    }
    return 0;
}

手游大佬

    点击打开链接  

本题题意就是判断这个人是"普通用户","土豪”,“网瘾少年”,“既土豪又网瘾”,判断依据就是每天平均充钱是否是100以上,这种就是土豪,每天玩的时间平均是12小时的这种就是网瘾少年,二者都有的就顾明思议了。时间是注册的日期到2018.4.22这天,记住包括这天,否则凉凉,我也是后来试出来的。

思路就是计算出具体的天数,分别乘以720,100,然后和已经花的钱和时间比较来判断你是什么类行的人。

#include<stdio.h>
#include<iostream>
#include<string.h>
#include<algorithm>
#include<math.h>
using namespace std;
int month[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
int y, m, d;
long long judge(int year, int m, int day){//计算天数
    long long sum = 0;
    int t = 2018 - year;
    if(t >= 1){//如果不是同一年
        sum += (t - 1) * 365;
        int f = m;
        while(f <= 11){
            sum += month[f];
            f++;
        }
        sum += (month[m-1] - day + 112);

    }
    if(t == 0){//是同一年
        int x = m;
        if(m == 4){
            sum += (22 - day);
        }
        else{
        while(x + 1< 4){
            sum += month[x];
            x++;
        }
        sum += (month[m - 1] - day + 22);
        }
    }
    for(int i = year; i <= 2017; i++){//是否有闰年
       if((i % 400 == 0 ) || (i % 4 == 0 && i % 100 != 0))sum += 1;
   }
    if(((year % 400 == 0 ) || (year % 4 == 0 && year % 100 != 0) )&& m > 2)sum -= 1;//如果这一年是闰年,但是3月份及其以上
   return sum;
}
int main(){
    int y, m, d;
    char a, b;
    long long money, time;
    int T;
    scanf("%d", &T);
    while(T--){
        scanf("%d %c %d %c %d %lld %lld", &y, &a, &m, &b,&d, &money, &time);
        long long total = judge(y, m, d);
        long long mm, tt;
        mm = 100 * (total+1);
        tt = (total+1) * 12 * 60;//total+1是保括2018.4.22日这一天
        if(total == 0){//判断过程,注意不能用 if  else if elseif。。这种只判断一次就不执行了,没法判断土豪加网瘾少年
            if(time >= 720 && time <= 1440)printf("G");
            if(money >= 100)printf("H");
            if(time < 720 &&  money < 100) printf("O");
        }
         else {
         if(tt <= time )printf("G");
         if(mm <= money)printf("H");
         if(tt > time && mm > money)printf("O");
        
        }
        printf("\n");

    }

return 0;
}

 


猜你喜欢

转载自blog.csdn.net/REfusing/article/details/80699305