牛客多校第六场 G Is Today Friday? 蔡勒公式/排列
题意:
有一堆日期,这些日期都是星期五,但是数字被映射成了字母A~J,现在让你求逆映射,如果存在多种答案,输出字典序最小的那个。
题解:
用蔡勒公式解决关于星期几的问题。
对于映射,可以用笔者刚刚学会的神器,next_permutation(),直接按照字典序生成排列数作为映射,一旦找到解,就输出,必定是字典序最小的。
理论上,枚举10个排列数需要枚举10!≈3e6次,生成下一个排列复杂度为O(n),每次枚举还要检查1e5个日期。
但是一旦找到合法的映射便可直接输出,而不合法的映射往往在检查前几个日期时就被检查出不合法,因此剪枝效果还是很好的。
注意要对于日期去重,对于去重来说unique()是个神器,能直接在排好序的数组上将重复元素只保留一个,然后返回去重之后的数组的最后一位的后一位的地址。参数也是类似于sort()
#include<iostream>
#include<string>
#include<cstring>
#include<algorithm>
using namespace std;
string date[];
char tmp[];
//char week[10000][13][32];
int refl[];
inline bool Leap(int year){
if(year%==||(year%== && year%!=))return ;
else return ;
}
inline bool days31(int month){
return (month== || month== || month== || month== || month== || month== || month==);
}
inline bool Zeller(int year,int month,int day){
if(year<)return ;
if(month== || month >=)return ;
if(day<=)return ;
if(month==){
if(Leap(year)){
if(day>)return ;
}else{
if(day>)return ;
}
}
if(days31(month)){
if(day>)return ;
}else{
if(day>)return ;
}
//判断日期合法性
if (month == || month == ){
year--;month += ;
}
//判断month是否为1或2
int c = year / ;
int y = year - c * ;
int week = y + y / + c / - * c + * (month + ) / + day - ;
week%=;
week+=;
week%=;
return (week==);
}
int main(){
int T;
scanf("%d",&T);
for(int I=;I<=T;I++){
int n;
scanf("%d",&n);
for(int i=;i<=n;i++){
scanf("%s",tmp);
// 0000/00/00
tmp[]=;
tmp[]=;
date[i].clear();
date[i]+=tmp;
date[i]+=tmp+;
date[i]+=tmp+;
}
sort(date+,date++n);
n=unique(date+,date++n)-date-;
//去重
// printf("%d\n",n);
for(int i=;i<;i++)refl[i]=i;
bool flag;
while(){
flag=;
for(int i=;i<=n;i++){
if(Zeller(
refl[date[i][]-'A']*+
refl[date[i][]-'A']*+
refl[date[i][]-'A']*+
refl[date[i][]-'A'],
refl[date[i][]-'A']*+
refl[date[i][]-'A'],
refl[date[i][]-'A']*+
refl[date[i][]-'A']
)==){
flag=;
break;
}
}
if(flag==){
printf("Case #%d: ",I);
for(int i=;i<;i++)printf("%d",refl[i]);
printf("\n");
break;
}else{
if(!next_permutation(refl,refl+))break;
}
}
if(flag==)printf("Case #%d: Impossible\n",I);
}
return ;
}
PS:蔡勒公式的巧妙之处在于它把1,2月当作去年的13,14月,因此将复杂的置闰放到了年底,简化了计算。
牛客多校第六场 G Is Today Friday? 蔡勒公式/排列的更多相关文章
- 2018牛客多校第六场 G.Pikachu
题意: 给出一棵n个点的树,每条边有边权.对这个树加边变成一个完全图.新加的边的权值为边上两点在树上的距离.求完全图上任意两点的最大流之和. 题解: 一共有C(n,2)个点对.假设当前求s到t之间的最 ...
- 牛客多校第六场G Is Today Friday?(吉姆拉尔森/蔡勒公式 + 思维)题解
题意: 给你\(A-J\)的字母组成的日期,形式为\(yyyy/mm/dd\).现给你\(n\)个这样的串\((n<=1e5)\),问你把字母映射成数字,并且使得所有日期合法且为星期五的最小字典 ...
- 牛客多校第三场 G Removing Stones(分治+线段树)
牛客多校第三场 G Removing Stones(分治+线段树) 题意: 给你n个数,问你有多少个长度不小于2的连续子序列,使得其中最大元素不大于所有元素和的一半 题解: 分治+线段树 线段树维护最 ...
- 牛客多校第四场 G Maximum Mode
链接:https://www.nowcoder.com/acm/contest/142/G来源:牛客网 The mode of an integer sequence is the value tha ...
- 牛客多校第六场 C Generation I 组合数学 阶乘逆元模板
链接:https://www.nowcoder.com/acm/contest/144/C来源:牛客网 Oak is given N empty and non-repeatable sets whi ...
- 牛客多校第六场 J Heritage of skywalkert 随即互质概率 nth_element(求最大多少项模板)
链接:https://www.nowcoder.com/acm/contest/144/J来源:牛客网 skywalkert, the new legend of Beihang University ...
- 牛客多校第六场-H-Pair
链接:https://ac.nowcoder.com/acm/contest/887/H来源:牛客网 题目描述 Given three integers A, B, C. Count the numb ...
- 字符串dp——牛客多校第五场G
比赛的时候脑瘫了没想出来..打多校以来最自闭的一场 显然从s中选择大于m个数组成的数必然比t大,所以只要dp求出从s中选择m个数大于t的方案数 官方题解是反着往前推,想了下反着推的确简单,因为高位的数 ...
- 2018牛客多校第六场 I.Team Rocket
题意: 给出n个区间和m个点(点按顺序给出且强制在线).每个区间只会被第一个他包含的点摧毁.问每个点能摧毁多少个区间以及每个区间是被哪个点摧毁的. 题解: 将n个区间按照左端点排序,然后用vector ...
随机推荐
- Nginx配置PHP环境支持
打开Nginx配置文件 输入 vim etc/nginx/nginx.conf 找到配置扩展文件: 打开配置文件配置如下环境: server { listen 80; server_nam ...
- PHP ftp_mkdir() 函数
定义和用法 ftp_mkdir() 函数在 FTP 服务器上创建一个新目录. 如果成功,该函数返回新目录的名称和路径.如果失败,则返回 FALSE. 语法 ftp_mkdir(ftp_connecti ...
- iscroll refresh无效解决办法
最近用iscroll.js 写移动页面,效果还是挺好的.但,还是会遇到重新初始化的问题. var myScroll = new IScroll('#rule_wrapper',{ click:true ...
- 【Dart学习】-- Dart之异常处理
概述: Dart2的异常与Java是非常类似的.Dart2的异常是Exception或者Error(包括它们的子类)的类型,甚至可以是非Exception或者Error类,也可以抛出,但是不建议这么使 ...
- 前台页面中json和字符串相互转化
比如我有两个变量,我要将a转换成字符串,将b转换成JSON对象: var a={"name":"tom","sex":"男&quo ...
- js (ECMAScript) 对数据处理的 方法、属性总结
注意:原生类型的数据本身是没有属性.方法的.但是 有的原始类型(如 string),当他 调用属性或方法时,JS引擎会先对原始类型数据进行包装(即隐式的转换为相应的对象) https://www.c ...
- Ext 可编辑的GridPanel
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- H. GSS and Simple Math Problem--“今日头条杯”首届湖北省大学程序设计竞赛(网络同步赛)
题目描述:链接点此 这套题的github地址(里面包含了数据,题解,现场排名):点此 题目描述 Given n positive integers , your task is to calculat ...
- robotframework+selenium2library之上传本地文件
针对将本地的文件上传到测试系统,selenium2library提供了一个关键词 choose file choose file jquery=*[name='Filedata']+label: ...
- Java-Class-@I:io.swagger.annotation.Api
ylbtech-Java-Class-@I:io.swagger.annotation.Api 1.返回顶部 2.返回顶部 1. package com.ylbtech.api.controlle ...