补题(慢慢补充)
天梯校选
#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;
}
- 新知识----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;
}
中石油训练
#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;
}
浙公网安备 33010602011771号