ATCoder ABC 001

ATCoder ABC 001

题目链接

A 题

太简单了,不放代码了。

B 题

其实,就是模拟,只是需要注意边界问题,是一个左开右闭的区间。

代码:

#include <bits/stdc++.h>
using namespace std;

int main()
{
    int m;

    cin >> m;
    if (m == 0)
        cout << 0 << 0 << endl;
    else if (m > 0 && m <= 5000)
    {
        if (m < 1000)
            cout << 0 << (10 * m) / 1000 << endl;
        else
            cout << (10 * m) / 1000 << endl;
    }
    else if (m > 5000 && m <= 30000)
        cout << m / 1000 + 50 << endl;
    else if (m > 30000 && m <= 70000)
        cout << (m / 1000 - 30) / 5 + 80 << endl;
    else
        cout << 89 << endl;
    return (0);
}

C 题

同样是模拟,只是 else if 的数量有点多,注意边界,同上。

这道题目需要求一个保留两位小数的浮点数,所以需要自己手写函数 Around

#include<cstdio>
#include<iostream>
#include<cstring>
#include<cmath>

using namespace std;

double Around(double x,double k){
	return floor(pow(10,k)*x+0.5) / pow(10,k);
	// 保留两位小数
}

int main()
{
	string s;
	int cmp,meter;double speed,sid;
	cin>>sid>>meter;
	speed = meter / 60.0;
	speed = Around(speed,1);
	if(sid >= 112.5 && sid <= 337.5)		s = "NNE";
	else if(sid >= 337.5 && sid < 562.5)	s = "NE";
	else if(sid >= 562.5 && sid < 787.5)	s = "ENE";
	else if(sid >= 787.5 && sid < 1012.5)	s = "E";
	else if(sid >= 1012.5 && sid < 1237.5)	s = "ESE";
	else if(sid >= 1237.5 && sid < 1462.5)	s = "SE";
	else if(sid >= 1462.5 && sid < 1687.5)	s = "SSE";
	else if(sid >= 1687.5 && sid < 1912.5)	s = "S";
	else if(sid >= 1912.5 && sid < 2137.5)	s = "SSW";
	else if(sid >= 2137.5 && sid < 2362.5)	s = "SW";
	else if(sid >= 2362.5 && sid < 2587.5)	s = "WSW";
	else if(sid >= 2587.5 && sid < 2812.5)	s = "W";
	else if(sid >= 2812.5 && sid < 3037.5)	s = "WNW";
	else if(sid >= 3037.5 && sid < 3262.5)	s = "NW";
	else if(sid >= 3262.5 && sid < 3487.5)	s = "NNW";
	else	s = "N";
	
	if(speed >= 0.0 && speed <= 0.2){printf("C 0\n");return 0;}
	else if(speed >= 0.3 && speed <= 1.5)	cmp = 1;
	else if(speed >= 1.6 && speed <= 3.3)	cmp = 2;
	else if(speed >= 3.4 && speed <= 5.4)	cmp = 3;
	else if(speed >= 5.5 && speed <= 7.9)	cmp = 4;
	else if(speed >= 8.0 && speed <= 10.7)	cmp = 5;
	else if(speed >= 10.8 && speed <= 13.8)	cmp = 6;
	else if(speed >= 13.9 && speed <= 17.1)	cmp = 7;
	else if(speed >= 17.2 && speed <= 20.7)	cmp = 8;
	else if(speed >= 20.8 && speed <= 24.4)	cmp = 9;
	else if(speed >= 24.5 && speed <= 28.4)	cmp = 10;
	else if(speed >= 28.5 && speed <= 32.6)	cmp = 11;
	else	cmp = 12;
	
	
	cout<<s<<" "<<cmp<<endl;
	return 0;
}

D 题

比较简单的思维题。

输入时,注意时间为 5 分钟为增量舍入时间,观察题目发现时间总是从 \(0000 \Rightarrow 9999\)。所以可以想到开一个桶,第 \(i\) 个桶表示第 \(i\) 个时间是否有雨。最后重新遍历一次桶,记录下开始和结束的节点并输入。

#include<cstdio>
#include<iostream>

using namespace std;

const int maxn = 110000;
int g[maxn];
int t;

int main()
{
	cin>>t;
	for(int i=1;i<=t;i++){
		int x,y;
		scanf("%d-%d",&x,&y);
		x -= (x%5);y += (5 - y%5) % 5;
		// cout<<x<<" "<<y<<endl;
		if(y%100>=60){
			y+=100;
			y-=60;
		}
		for(int j=x;j<y;j++)	g[j] ++;
	}
	
	int on=0,be=0;
	for(int i=0;i<110000;i++){
		if(g[i]){
			if(!on)be=i;
			on=1;
		}
		else if(on){
			printf("%04d-%04d\n",be,i);
			on=0;
		}
	}
	return 0;
}
posted @ 2021-11-06 23:02  在那遥远的悠穹下  阅读(97)  评论(0编辑  收藏  举报