觉醒!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;
}