补题(慢慢补充)

天梯校选

题解详细

7-4 数名字 (15 分)

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<string>
using namespace std;
int main()
{
    cin.tie(0);//加快cin的输入速度
    cout.tie(0);
    cin.sync_with_stdio(false);
    //sync_with_stdio这个函数是一个“是否兼容stdio”的开关,C++为了兼容C,保证程序在使用了std::printf和std::cout的时候不发生混乱,将输出流绑到了一起。
    int n;
    cin >> n;
    int p;
    string str;
    for (register int i = 1; i <= n; i++)//register可以加快速度
    {
        cin >> str;
        //是因为s==“predator”比较时间比计算s.size()慢得多,先判断长度可以减少很多时间
        if (str.size() == 8 && str == "predator")
        {
            cout << i;
            exit(0);
       }
    }
    return 0;
}

参考文章1
参考文章2

  • 新知识----get√
    快读>scanf>cin
    cin.tie(0);
    cout.tie(0);
    cin.sync_with_stdio(false);

其实也不用快读,scanf就够了

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<string>
using namespace std;
char str[10000000];
int main()
{
    int n;
    scanf("%d", &n);
    string s1 = "predator";
    for (int i = 1; i <= n; i++)
    {  
        scanf("%s", str);
        string s2 = str;//赋值一下,方便用string的函数
        if (s2.size() == 8 && s1 == s2)
        {
            printf("%d", i);
            exit(0);
        }
    }
    return 0;
}

7-5 弛神的心是冰冰的 (10 分)
解释看题解就行,挺清楚的

#include <bits/stdc++.h>
using namespace std;
int main() {
	//老问题,用cin会有一个测试点超时
	long long n;
	scanf("%lld",&n);
	int  flag = 1;
	for (int i = 0; i < n - 1; i++) {
		long u,v;
		scanf("%lld %lld",&u,&v);
		if (u != v)flag = 2;
	}
	cout << flag;
    return 0;
}

天梯训练

天梯第四次训练

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main()
{
	int s = 0;//设开始已完成安排的学校为0
	int n;
	vector<int>que;//每个学校队伍个数
	vector<int>ans[100];//二维数组
	学到了一个新的定义二维数组的方法(行是有限制,列随意)
	cin >> n;//参赛学校个数
	for (int i = 0; i < n; i++)//每个学校的人数=学校参赛队伍*10;
	{
		int num;
		cin >>num;
		que.push_back(num);
	}
	int x = 1;//座位号起始为1;
	int j = 0;//学校的下标
	while (s<n)
	{
		if (ans[j].size() >= que[j] * 10);//如果该学校的座位已安排结束不用管
		else
		{
			ans[j].push_back(x);
			if (s == n - 1)//只剩一个学校没有安排好,那么后面只安排这个学校就要间隔开来
				x += 2;
			else x++;
			if (ans[j].size() >= que[j] * 10) s++;//又一个学校安排好座位了
		}
		//这一段的思路就是:
		//除了只剩一个学校安排座位时要隔一个安排一个,其余都可以采用一个学校轮换到另一个学校进行安排作为
		//只要这个学校的作为没安排完就x++,安排完了就不处理,跳到下一个学校
		j++;//下一个学校
		(这个我竟然没想到,差评!!一个一个学校轮换着插入啊啊啊啊)
		j = j % n;
	}
	for (int i = 0; i < n; i++)//学校
	{
		printf("#%d\n", i + 1);
		for (int t = 0; t < que[i]; t++)//队伍
		{
			for (int k = 0; k < 10; k++) {
				if (k != 0) printf(" ");
				printf("%d", ans[i][t * 10 + k]);
			}
			cout << endl;
		}
	}
	return 0;
}

中石油训练

问题 D: Perfect Choir

#include<iostream>
#include<algorithm>
#include<math.h>
using namespace std;
typedef long long ll;
int main()
{
	//思路(大佬给的)
	//每次一个加一个减综合不变
	//最后能所有人音调一致,这个一致的音调设为N
	//所以n*N=sum
	//那么先判断是否综合能整除(即能实现指挥员要的效果)
	//然后把每个人到达这一步要变化的步数加在一块(既然要步数最小,就一直变大或变小)
	//最后记得除以2加一
	ll n;
	while (cin >> n) {
		ll a[10050];
		ll sum = 0;
		for (ll i = 0; i < n; i++)
		{
			cin >> a[i];
			sum += a[i];
		}
		if (sum % n != 0) {
			cout << "-1" << endl;
			continue;
		}
		ll count=0;
		for (ll i = 0; i < n; i++)
			count += abs(a[i] - sum / n);
		cout<<count/2+1<<endl;
}
	return 0;
}

posted on 2021-04-17 23:09  不依法度  阅读(39)  评论(0)    收藏  举报

导航