菜鸡日常刷CF # 452DIV2 前三题
来源:互联网 发布:淘宝怎么成为大v 编辑:程序博客网 时间:2024/06/16 13:32
其实都挺简单的……打算尝试做一下后面三题,先把前三题的题解写了好啦
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 24int 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 = 1elif n % 4 == 3 or n % 4 == 0: dif = 0# find out the num_listnow = 0for i in range(n // 2): num_list.append(i + 1) now += i + 1i += 1while now != part_sum: if now < part_sum: i += 1 num_list.append(i) now += i else : now -= num_list.pop(0)# print the resultprint(dif)print(len(num_list), end=" ")for i in range(len(num_list)): print(num_list[i], end=" ")
阅读全文
0 0
- 菜鸡日常刷CF # 452DIV2 前三题
- cf 131 DIV2 B
- CF #148 DIV2 E
- CF #137 DIV2
- CF 149 div2感想
- CF-div2--149
- CF 154 Div2
- cf-#170-div2-后记
- cf#168div2
- cf#167div2
- cf#166div2
- CF 183(div2)
- CF 173(div2) B
- cf#div2--184
- CF 174(div2) D
- CF 165(div2)
- CF 168(div2)
- CF 167(div2)
- (安卓特效) 卡片式控件 CardView
- Apache windows 配置一个 IP 绑定多个域名
- dl4j的BaseLayer前向与反向传播算法计算过程简介
- Python 2.7 拾遗(3)
- try-with-resources资源自动释放特性
- 菜鸡日常刷CF # 452DIV2 前三题
- Map.putAll()的用法
- FFmpeg常用命令集合
- 修改包名Xcode
- OpenGL: 模板缓冲区的理解
- 程序员 30 岁前,该如何规划自己的职业发展?
- dubbo2.5.3注解版
- 规则引擎
- mysql