2021年度训练联盟热身训练赛第三场

A.Circuit Math

AC代码:

#include <cstring>
#include <string.h>
#include <stack>
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
stack<int>st;
char zz[30];
int main()
{
	int n;
	cin >> n;
	for (int i = 0; i < n; i++)
	{
		cin >> zz[i];
	}
	char s[255];
	int ss=0;
	char c;
	while(cin>>c)
	{
		s[ss]=c;
		//cout<<"c"<<c<<'\n';
		//cout<<"s"<<s[ss]<<'\n';
		ss++;
	}
	//cout<<"ss"<<ss<<'\n';
	int len=ss;
	//cout<<len<<'\n';
	int num = 0;
	while (num < len)
	{
		if (s[num] >= 'A'&&s[num] <= 'Z')
		{
			//cout<<zz[s[num] - 'A']<<'\n';
			if (zz[s[num] - 'A'] == 'T')
				st.push(1);
			else st.push(0);
			num++;
		}
		else if (s[num] == '*')
		{
			int a = st.top();
			st.pop();
			int b = st.top();
			st.pop();
			if (a == 1 && b == 1)
				st.push(1);
			else st.push(0);
			num++;
		}
		else if (s[num] == '+')
		{
			int a = st.top();
			st.pop();
			int b = st.top();
			st.pop();
			if (a == 1 || b == 1)
				st.push(1);
			else st.push(0);
			num++;
		}
		else if (s[num] == '-')
		{
			int a = st.top();
			st.pop();
			if (a == 1)
				st.push(0);
			else st.push(1);
			num++;
		}
	}
	int xx = st.top();
	if (xx == 1)cout << "T" << '\n';
	else cout << "F" << '\n';
	return 0;
}

B.Diagonal Cut

一看就是和gcd有关。
然后用gcd写发现样例过了但是WA了。。
一会才知道原来还要看一个数%它和另一个数的gcd之后的数是奇数还是偶数。
都是奇数才有答案,有一个是偶数就是0,没有被平均分成两份的。

AC代码:

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

//gcd模板
ll gcd(ll a, ll b){
	return b == 0 ? a : gcd(b, a % b);
} 

ll m, n, ans;

int main(){
    cin >> m >> n;
    ans = gcd(a, b);
    m /= ans;
    n /= ans;
    if((m % 2 == 1) && (n % 2 == 1)){
        cout << ans << endl;
    }
	else{
        cout << 0 << endl;
    }
    return 0;
}

C.Gerrymandering

AC代码:

#include <cstring>
#include <string>
#include <set>
#include <iostream>
#include <cstdio>
//#include<unordered_set>
#include <algorithm>
using namespace std;
long long zz1[1010];
long long zz2[1010];
int main()
{
	int p, d;
	cin >> p >> d;
	long long sum1 = 0;
	long long sum2 = 0;
	long long sum3 = 0;
	while (p--)
	{
		int diq, a, b;
		cin >> diq >> a >> b;
		zz1[diq] += a;
		zz2[diq] += b;
		sum1 += a;
		sum1 += b;
	}
	for (int i = 1; i <= d; i++)
	{
		long long ans = (zz1[i] + zz2[i]) / 2 + 1;
		//cout<<ans<<'\n';
		if (zz1[i] > zz2[i])
		{
			cout << "A" << " ";
			long long x1 = zz1[i] - ans;
			cout << x1 << " " <<zz2[i] << '\n';
			sum2+= x1;
			sum3 +=zz2[i];
		}	
		else 
		{
			cout<<"B"<<" ";
			long long x2 = zz2[i] - ans;
			cout << zz1[i]<< " " <<x2  << '\n';
			sum3+= x2;
			sum2+=zz1[i];
		}
	}
	
	double xx=sum2-sum3;
	if(xx<0)xx=-xx;
	
	double yy = xx * 1.0 / sum1;
	printf("%.10lf\n", yy);
	return 0;
}

D.Missing Numbers

用f表示一个新的顺序对的数。(0,1,2,3,……这种)数组sr记录小盆友写的数。ff表示遍历到第几个数了。如果sr【ff】 = f则说明小盆友写的顺序是对的。如果sr【ff】!= f则说明小盆友写的顺序不对,需要输出中间落下的数,直到sr【ff】再次等于f为止。如果全部相等说明小盆友输入的都是对的,则输出good job夸奖一下小盆友~
AC代码:

#include <bits/stdc++.h>
using namespace std;
const int N = 1100 + 7;

int n, sr[N];
bool flag;

int main(){
	cin >> n;
	for (int i = 1; i <= n; ++i){
		cin >> sr[i];
	}
	int f = 1;
	flag = 0;
	int sum = 0;
	for (int ff = 1; ff <= n;){
		if(sr[ff] == f){
			sum ++;
			f++;
			ff++;
		}
		else{
			cout << f << endl;
			flag = 1;
			f++;
		}
	}
	if(!flag) cout << "good job" << endl;
	return 0;
}

K.Summer Trip

暴力出奇迹!
遍历,用map记录每个字母之前是否出现过来优化时间。
memset的时间复杂度是O(n)不是O(1)。
AC代码:

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

int vis[100000+5] ;

int main(){
	std::ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	string s;
	cin >> s;
	int l = s.size();
	ll sum = 0;
	map<char, int>mp;
	for(int i = 0; i < l; ++i){
	    int k = 1;
	    for(int j = i + 1; j < l && k <= 26; ++j){
	    	if(s[j] == s[i]) break;
            if(mp[s[j]] == 0){
            	mp[s[j]] = 1;
            	sum++;
            	k++;
			}
		}
		mp.clear();
	}
	cout << sum << endl;
	return 0 ;
}

M.Zipline

物理问题。晾衣架原理。
图片竟然上传不了!!气死了www~
AC代码:

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

double n, w, g, h, r;
double mmin, mmax;

int main(){
	cin >> n;
	while(n--){
		cin >> w >> g >> h >> r;
		if(g == h) {
			mmin = w;
			mmax = sqrt((w*w/4) + (h-r)*(h-r)) * 2;
		}
		else if(g != h){
			double a = g + h - 2*r;
			double b = w*(g-r);
			double c = w*(h-r);
			mmin = sqrt(w*w + (h-g)*(h-g));
			mmax = sqrt((g-r) * (g-r) + ((b*b) / (a*a))) + sqrt((h-r)*(h-r) + ((c*c) / (a*a)));
		}
		printf("%.8lf %.8lf\n", mmin, mmax);
	}
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 以下是一份1公里跑进3分钟的训练计划: 周一: - 热身:轻松步行5分钟 - 短跑:跑200米,每400米休息1分钟,重复8次 - 冷却:轻松步行5分钟 周三: - 热身:轻松步行5分钟 - 中等跑:跑800米,每400米休息1分钟,重复2次 - 冷却:轻松步行5分钟 周五: - 热身:轻松步行5分钟 - 长跑:跑1公里,每400米休息1分钟 - 冷却:轻松步行5分钟 注意:在训练期间,要记得做好适当的拉伸和放松,以及保持良好的饮食和睡眠习惯。此外,如果感觉身体不适或者有伤病,需要及时停止训练并咨询医生的建议。 ### 回答2: 1公里跑进3分钟是一个非常具有挑战性的训练目标。要达到这个目标,需要坚持训练并合理安排训练计划。 首先,要进行适当的热身运动,如慢跑或者跑步准备活动,帮助身体逐渐进入运动状态。 其次,可以选择间歇训练方法,即快跑和慢跑交替进行。开始时,可以跑快1分钟,然后慢跑或步行1分钟,然后再次进行快跑1分钟,如此反复进行,直到完成所需的1公里距离。 此外,可以加入一些力量训练和耐力训练,如腿部和核心肌群的练习,帮助提高速度和耐力。 在训练过程中,要注意正确的姿势和呼吸方式,以提高效果和减少受伤的风险。 另外,饮食和休息也非常重要。要确保摄入足够的营养,包括碳水化合物、蛋白质和健康脂肪,以及保持充足的水分摄入。此外,适当的休息和睡眠对于身体的恢复和提高训练效果也至关重要。 最后,要坚持训练计划,逐渐提高训练强度和距离。不要急于求成,要有耐心,并且要根据个人的身体状况和进展情况进行调整。 总之,要实现1公里跑进3分钟的目标,需要坚持适当的训练计划,合理安排训练内容和休息,注意饮食和休息,以及保持积极的心态和耐心。 ### 回答3: 1公里跑进3分钟的训练计划需要结合力量、速度和耐力的训练。以下是一个可能的训练计划: 第一周: - 第一天:进行平坦地面上的长跑,以提高耐力。跑3公里,每公里配速5分钟。 - 第二天:进行间歇性训练,提高速度。跑400米,每次配速1分30秒,然后休息2分钟,重复5次。 - 第三天:进行山地跑步,提高全身力量和爆发力。选择一个有一定坡度的路线,跑2公里,每公里配速5分钟。 - 第四天:进行短间歇性训练,加强速度。跑200米,每次配速45秒,然后休息1分钟,重复8次。 - 第五天:进行综合性训练,结合力量和速度。跑500米,配速2分,然后进行8组深蹲和8组俯卧撑。 第二周: - 第一天:进行长跑,保持前一周的配速。跑4公里,每公里配速5分钟。 - 第二天:进行更长的间歇性训练,提高速度和耐力。跑800米,每次配速3分,然后休息3分钟,重复4次。 - 第三天:进行更具挑战性的山地跑步。选择一个更陡峭的路线,跑3公里,每公里配速5分半。 - 第四天:进行更快的短间歇性训练。跑100米,每次配速20秒,然后休息45秒,重复10次。 - 第五天:进行全身训练,用以增强力量和速度。跑300米,配速1分半,然后进行10组深蹲、10组俯卧撑和10组仰卧起坐。 第三周: - 第一天:进行持久跑,保持之前的配速。跑5公里,每公里配速5分钟。 - 第二天:进行更具挑战性的间歇性训练。跑1公里,每次配速4分半,然后休息4分钟,重复3次。 - 第三天:进行长跑,选择山地路线。跑6公里,每公里配速6分钟。 - 第四天:进行更强烈的短间歇性训练。跑50米,每次配速15秒,然后休息30秒,重复15次。 - 第五天:进行高强度全身训练。跑200米,配速1分,然后进行15组深蹲、15组俯卧撑和15组仰卧起坐。 通过这样的训练计划,慢慢增加距离和提高配速,您将逐渐接近1公里跑进3分钟的目标。请务必根据自己的身体状况和目标进行调整,并与教练或专业人士咨询。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值