其实都挺简单的……打算尝试做一下后面三题,先把前三题的题解写了好啦
A
其实就是统计1和2的个数 做简单判断即可,连我这种菜鸡都没什么问题
用C++写的(学校里在学,所以我一般写题是用C++)
#include <iostream>
using namespace std;
int main(void) {
ios::sync_with_stdio(false);
int n;
cin >> n;
int ones, twos, tmp;
ones = twos = 0;
while (n--) {
cin >> tmp;
if (tmp == 1)
ones++;
else if (tmp == 2)
twos++;
}
int teams = twos >= ones ? ones : twos;
if (ones > twos) {
teams += (ones - twos) / 3;
}
cout << teams << endl;
return 0;
}
B
数年月,比我之前做过的一道输出某年某月的日历简单多了…
像我一样做简单判断可以,也看到很多人直接写了四年的,这样就包括了所有可能性,我觉得也很好,特别python的in来判断是否在那里面特别简单(用字符串的话 你懂我意思吧)
依然是用C++写的 (感觉我每次写个C++程序又臭又长
#include <iostream>
using namespace std;
#define MAX 24
int main(void) {
ios::sync_with_stdio(false);
int months[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
int a[MAX];
int n, i, j, tmp, k;
cin >> n;
for (i = 0; i < n; i++) {
cin >> tmp;
if (tmp > 31 || tmp < 28) {
cout << "NO" << endl;
return 0;
}
a[i] = tmp;
}
// see if it's ok
i = j = 0;
bool flag;
tmp = a[0];
for (j = 0; j < 12; j++) {
if (tmp == months[j] || (tmp == 29 && j == 1)) {
k = j;
flag = 0;
for (i = 0; i < n; i++, k++) {
if (k > 11) {
k %= 12;
}
if (a[i] != months[k]) {
if (k == 1 && a[i] == 29 && !flag) {
flag = 1;
}
else {
break;
}
}
}
if (i == n) {
cout << "YES" << endl;
return 0;
}
}
}
cout << "NO" << endl;
return 0;
}
C
其实很好奇这道题究竟应该怎么做,但tutorial还没出来
所以今天下午和同学一起又想了会 就做出来了
其实分析一下,我们可以知道 对于两组的difference,其实只会有两种情况,就是0和1,那么一个简单判断就可以完成。比较麻烦的是输出分组,今天下午突然想到了一种玄学方法…都不知道怎么在理论上证明此法可行…具体就是先把需要的那一半给算出来,我是都算小的那半,然后把从1到n的前一半给提出来,放列表里(或者C里面的数组里 就这个意思嘛),列表元素的和如果小于需要的值,那么就把还没加如列表后面那个给吃进去;如果大于的话,就把列表中第一个元素给吐出来…具体的可以想想一个框在1 2 … n 这些数上移动,右边吞,左边吐。
python写的(因为这学期的C考完了…暂时不用担心…所以就又优先用我喜欢的语言了)
(今天用markdown一点也不顺,一按回车键就疯狂跳…还会在代码里给我加奇怪的东西 哼)
(不想加标签了,写这个就自己玩玩)
n = int(input())
num_list = []
part_sum = (n * (n + 1)) // 4
# find out the "difference"
if n % 4 == 1 or n % 4 == 2:
dif = 1
elif n % 4 == 3 or n % 4 == 0:
dif = 0
# find out the num_list
now = 0
for i in range(n // 2):
num_list.append(i + 1)
now += i + 1
i += 1
while now != part_sum:
if now < part_sum:
i += 1
num_list.append(i)
now += i
else :
now -= num_list.pop(0)
# print the result
print(dif)
print(len(num_list), end=" ")
for i in range(len(num_list)):
print(num_list[i], end=" ")