HUST 1698 - 电影院 组合数学 + 分类思想

http://acm.hust.edu.cn/problem/show/1698

题目就是要把一个数n分成4段,其中中间两段一定要是奇数。

问有多少种情况。

分类,

奇数 + 奇数 + 奇数 + 奇数

奇数 + 奇数 + 奇数 + 偶数

偶数 + 奇数 + 奇数 + 奇数

偶数 + 奇数 + 奇数 + 偶数

然后奇数表达成 2 * a - 1这个样子,就能列出方程。

然后就是类似于解a1 + a2 + a3 + a4 = x的问题了。

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <assert.h>
#define IOS ios::sync_with_stdio(false)
using namespace std;
#define inf (0x3f3f3f3f)
typedef long long int LL;

#include <iostream>
#include <sstream>
#include <vector>
#include <set>
#include <map>
#include <queue>
#include <string>
#include <bitset>
LL C(LL n, LL m) {
    if (n < m) return 0; //防止sb地在循环
    if (n == m) return 1;  //C(0,0)也是1的
    LL ans = 1;
    LL mx = max(n - m, m); //这个也是必要的。能约就约最大
    LL mi = n - mx;
    for (int i = 1; i <= mi; ++i) {
        ans = ans * (mx + i) / i;
    }
    return ans;
}

void work() {
    int n;
    scanf("%d", &n);
    LL ans = 0;
    if ((n + 4) % 2 == 0) ans += C((n + 4) / 2 - 1, 3);
    if ((n + 3) % 2 == 0) ans += C((n + 3) / 2 - 1, 3) * 2;
    if ((n + 2) % 2 == 0) ans += C((n + 2) / 2 - 1, 3);
    static int f = 0;
    printf("Case #%d: %lld\n", ++f, ans);
}

int main() {
#ifdef local
    freopen("data.txt", "r", stdin);
//    freopen("data.txt", "w", stdout);
#endif
    int t;
    scanf("%d", &t);
    while (t--) work();
    return 0;
}

时间: 2024-08-01 06:20:08

HUST 1698 - 电影院 组合数学 + 分类思想的相关文章

封装.抽取分类思想

1.分析界面,界面非常简单,界面内容固定,直接使用xib来描述 注意:使用xib要先绑定类,还需要连线 如果是在创建类的同时也创建xib就可以省略上面操作,   系统自动帮我们做了 2.登录注册界面分析 复杂界面(子控件非常多) 2.1划分结构(顶部,中间,底部) 2.2创建占位视图,占据结构位置 2.3一个结构一个结构做 3.把每一块结构都单独封装起来,   为什么? 方便以后需求变更,我们来改代码 封装的时候可以考虑两点: 1.如果界面是固定的,直接用xib来封装 2.如果该结构以后可能只是

编程思想、哲学、道与术

一切的起源:问题及问题的求解: 编程是为了解决问题,而解决问题可以有多种视角和思路: 世界观与方法论: 马克思:世界是物质的,物质是运动的:运动着的物质是普遍联系和永恒发展的: 编程思想与世界观: 我们知道,哲学领域中,最根本的对立是唯物主义和唯心主义的对立,而附属其下,又有许多对立,如形而上学和辩证法的对立.可知论和不可知论的对立等等.这些对立形成了哲学的基本体系.派别和出发点.实际上,这些对立,都是世界观的对立.世界观,简而言之即如何看待这个世界.世界观是一切哲学问题的本源和出发点. 同样,

[POJ 3734] Blocks (矩阵快速幂、组合数学)

Blocks Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 3997   Accepted: 1775 Description Panda has received an assignment of painting a line of blocks. Since Panda is such an intelligent boy, he starts to think of a math problem of paint

无限极分类中递归查找一个树结构

问题:设计公司的员工表,员工有不同级别,要求可通过一个员工查到其下属的所有员工,也可查到其所属的上级. 解决:递归实现无限分类思想,每一个员工存入其所属的上级的id作为自己的pid,另外存入path,path包含自身id,方便显示路径. 递归的注意点: 1.一定有一个判断条件,否则递归就死循环了 2.每次的递归结果要保存起来,变量自增的实现三种方式: function(&$bar):通过引用地址 global :通过设置为全局变量 static :设置为静态变量 header( "Con

(3.2)将分词和去停用词后的评论文本基于“环境、卫生、价格、服务”分类

酒店评论情感分析系统(三)—— 将分词和去停用词后的评论文本基于“环境.卫生.价格.服务”分类 思想: 将进行了中文分词和去停用词之后得到的词或短语按序存在一个数组(iniArray)中,从中找出所有和“环境.卫生.价格.服务”四个方面相关的词或短语,并记录下其位置信息(sortRefNum).然后按照位置信息,对每一个标记出的关键词,记录下从当前关键词起到下一个关键词止的信息,放入一个String型的数组中(midArray),最后将此数组中的关键词再分别基于“环境.卫生.价格.服务”四个方面

为什么会有事务(Transaction)与分层开发思想?

1.         对数据库操作的事务主要的作用就是给数据入库和出库数据库的时候提供一个原子性(atomicity),一致性(consistency),隔离性(isolation),持久性(durability)的规定约束. a)         这四大特性是数据库事务(Transaction)的属性. i.              原子性:数据入库操作是出现回滚事务时数据库的数据记录能够和入库的数据流记录解耦,能够恢复到对数据库数据未操作时的状态,这就是数据的原子性. ii.       

SVM支持向量机,训练与分类的实现(有标签)

弄懂SVM支持向量机的原理以后开始代码演练: 具体的分类思想,注释的很清楚了. # 1 思想 分类器 # 2 如何? 寻求一个最优的超平面 分类 # 3 核:line # 4 数据:样本 # 5 训练 SVM_create train predict # svm本质 寻求一个最优的超平面 分类 # svm 核: line # 身高体重 训练 预测 import cv2 import numpy as np import matplotlib.pyplot as plt #1 准备data 准备两

整数划分问题

1.将n个不同的数字组成的集合划分成若干个元素和不大于m的集合: 1).若是划分多个可重复整数: dp[n][m]= dp[n][m-1]+ dp[n-m][m] dp[n][m]表示整数 n 的划分中,每个数不大于 m 的方案数. 则划分数可以分为两种情况: a.划分中每个数都小于 m,相当于每个数不大于 m- 1, 故划分数为 dp[n][m-1]. b.划分中至少有一个数为 m. 那就在 n中减去 m ,剩下的就相当于把 n-m 进行划分, 故划分数为 dp[n-m][m]; 2).若是划

用户画像知识

用户画像相关知识点 1.用户画像是什么? 用户画像(User Profile),即用户信息标签化. 用户画像有很多的的标签组成,每个标签都规定了观察.认识.描述用户的角度.标签根据企业业务的发展情况,或多或少,对外而言都是一个整体,这个整体称之为用户画像. 2.为什么需要用户画像? 用户画像的核心工作是为用户打标签,打标签的重要目的之一是为了让人能够理解并且方便计算机处理. 大数据处理,离不开计算机的运算,标签提供了一种便捷的方式,使得计算机能够程序化处理与人相关的信息,甚至通过算法.模型能够"