先膜一波宽神Orz%%%%%

拿到这题的第一反应就是:暴力啊!感觉神奇的钟点并没有什么性质,可能卡常能过吧……所以就写了一个O(22^3*59^3)的暴力。本来想打表,但是发现代码长度有限制,写不下。写完后发现,总共只有127034种神奇的钟点,所以当k特别大时,直接输出-1就可以了。如果数据纯随机的话,2*10^9应该能骗过不少吧。然而这种并不对劲的思想显然是会被察觉的,虽然用尽各种方法卡常,但是并没有拿多少分。

下午听讲评时,宽神说:还能怎么做?暴力啊!

我:

事实上并不是神奇的卡常方法。这道题的正解竟然也是打表!不过要用到分段打表的技巧。因为可以发现,搜索时间时,已知前一个时间就可以递推出下一个时间。

这也就是说,暴力枚举可以从中间开始。这样就可以设定一个每段的大小k,只对排在第k,k*2,k*3等k的倍数打表,查询时从离查询的名次最近的表搜。这样就找到了暴力枚举(TLE)和打表(MLE或代码长度LE)的折中方法,分段打表(AC)。

#include<algorithm>
#include<cmath>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<iomanip>
using namespace std;
int h1;
int h2,h3,m1,m2,m3;
int tmp1,gdc;
int upl,dnl,upr,dnr;
int ch1[]={,,,,,,,,,,,,,,,};
int ch2[]={,,,,,,,,,,,,,,,};
int ch3[]={,,,,,,,,,,,,,,,};
int cm1[]={,,,,,,,,,,,,,,,};
int cm2[]={,,,,,,,,,,,,,,,};
int cm3[]={,,,,,,,,,,,,,,,,};
inline int read()
{
int x=,f=;
char ch=getchar();
while((!isdigit(ch))&&ch!='-')ch=getchar();
if(ch=='-'){f=-,ch=getchar(); }
while(isdigit(ch))x=x*+ch-'',ch=getchar();
return x*f;
}
inline void write(int x)
{
char ch[];int f=;
if(!x){putchar('');return ;}
if(x<){putchar('-');x=-x;}
while(x)ch[++f]=x%+'',x=x/;
while(f)putchar(ch[f--]);
}
inline void writen(int x)
{
char ch[];int f=;
if(!x){putchar('');return ;}
if(x<){putchar('-');x=-x;}
while(x)ch[++f]=x%+'',x=x/;
while(f)putchar(ch[f--]);
putchar('\n');
}
inline int gcd(int x,int y)
{
//cout<<"+";
if(x>y)swap(x,y);
if(x==)return y;
return gcd(y%x,x);
}
void print()
{
if(h1<)putchar('');
write(h1);
putchar(':');
if(m1<)putchar('');
write(m1);
putchar(' ');
if(h2<)putchar('');
write(h2);
putchar(':');
if(m2<)putchar('');
write(m2);
putchar(' ');
if(h3<)putchar('');
write(h3);
putchar(':');
if(m3<)putchar('');
writen(m3);
}
int main()
{
int t=read();
if(t>){writen(-);return ;}
int h4,m4;
h1=ch1[t/];
h2=ch2[t/];
h3=ch3[t/];
m1=cm1[t/];
m2=cm2[t/];
m3=cm3[t/];
int T=(t/)*-;
bool f=;
for(;h1<;++h1)
{
if(f)m1=;
for(;m1<;++m1)
{
if(f)h2=;
for(;h2<;++h2)
{
if(h1+h2>=)continue;
if(f)m2=;
for(;m2<;++m2)
{
if(f)h3=;
for(;h3<;++h3)
{
if(h1+h2+h3>=)continue;
if(f)m3=;
for(;m3<;++m3)
{
//print();
//if(m3==0){++T;continue;}
m4=m1+m2+m3;
h4=m4/;
m4=m4-h4*;
if(m4>= || (!m4))continue;
h4+=h1+h2+h3;
if(h4>=)continue;
if((!h4) && (!h1+h2+h3))
{
// cout<<h1<<",";
++T;
f=;
//
if(t==T)
{
print();
goto end;
}
// cout<<t<<endl;
continue;
}
tmp1=gcd(h4,m4);
upl=h4/tmp1;
dnl=m4/tmp1;
tmp1=gcd(m1,m2);gdc=m1*m2/tmp1;
tmp1=gcd(gdc,m3);dnr=gdc*m3/tmp1;
upr=h1*dnr/m1+h2*dnr/m2+h3*dnr/m3;
tmp1=gcd(upr,dnr);
upr=upr/tmp1;
dnr=dnr/tmp1;
//cout<<t<<endl;
if(upl==upr && dnl==dnr)
{
// cout<<h1<<",";
++T;
f=;
// cout<<t<<endl;
//
if(t==T)
{
print();
goto end;
}
// if(t%10000==0)cout<<t;
} }
}
}
}
}
}
end:return ;
}
//

并不对劲的人好菜啊。

并不对劲的bjwc d4t1的更多相关文章

  1. bjwc Day3 & 4 妈妈我这是来了个什么地方呀

    真·bjwc开始了 Day3 T1啥啥啥 第k大斜率?想都没想码了个暴力,然后爆零...暴力都能错,退役 T2看着像网络流就扔了个网络流大暴力上去,六七十分的样子然后蜜汁wa T3题面说“想都没想就弄 ...

  2. bjwc Day0 大型签到日

    1.18期末考试 1.19试卷讲评 1.20我开始了bjwc愉快的冬眠之旅 上午先是颁发noip一等奖 我在台下笑得像个没有一等奖的孩子/手动微笑 然后去机房试了一下机 坐在鸡神边上,键盘竟然是坏的, ...

  3. 并不对劲的BJOI2019

    一些感想 现实并非游戏,并不支持反复刷关 猎人和防御工事一起被老山龙摧毁了: 猎人惨死雨中,结云村永无放晴之日: 猎人被狂龙病毒侵蚀,天空山上黑蚀龙泛滥. 好像这才是怪物猎人系列的真实结局呢 day ...

  4. 并不对劲的uoj276. [清华集训2016]汽水

    想要很对劲的讲解,请点击这里 题目大意 有一棵\(n\)(\(n\leq 50000\))个节点的树,有边权 求一条路径使该路径的边权平均值最接近给出的一个数\(k\) 输出边权平均值下取整的整数部分 ...

  5. 并不对劲的DFT

    FFT是一个很多人选择背诵全文的算法. #include<algorithm> #include<cmath> #include<complex> #include ...

  6. 并不对劲的字符串专题(三):Trie树

    据说这些并不对劲的内容是<信息学奥赛一本通提高篇>的配套练习. 并不会讲Trie树. 1.poj1056-> 模板题. 2.bzoj1212-> 设dp[i]表示T长度为i的前 ...

  7. 并不对劲的字符串专题(二):kmp

    据说这些并不对劲的内容是<信息学奥赛一本通提高篇>的配套练习. 先感叹一句<信息学奥赛一本通提高篇>上对kmp的解释和matrix67的博客相似度99%(还抄错了),莫非mat ...

  8. 并不对劲的bzoj1861: [Zjoi2006]Book 书架

    传送门-> 这题的正确做法是splay维护这摞书. 但是并不对劲的人选择了暴力(皮这一下很开心). #include<algorithm> #include<cmath> ...

  9. 并不对劲的bzoj3932: [CQOI2015]任务查询系统

    传送门-> 离线操作听上去很简单,遗憾的是它强制在线. 每个时刻可以看成可持久化线段树中的一个版本,而每一个版本的线段树维护的是值某一段区间且在这个版本对应的时刻出现的数之和. 会发现同一时刻可 ...

随机推荐

  1. pop(),del A[:], a[:] = b[:]/'str'/可迭代的

    s = ['a','ma','shi','ge'] s0 = s.pop(0) #---> 有返回值 print(s,s0) s1 = s.remove('shi') #---> 无返回值 ...

  2. 集训第五周 动态规划 K题 背包

    K - 背包 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Statu ...

  3. //……关于TCP三次握手与四次挥手

    TCP的概述 TCP把连接作为最基本的对象,每一条TCP连接都有两个端点,这种断点我们叫作套接字(socket),它的定义为端口号拼接到IP地址即构成了套接字,例如,若IP地址为192.3.4.16 ...

  4. PowerShell Tools for Visual Studio 2015

    首先要去下载Visual Studio 2015 RC 版本 https://www.visualstudio.com/en-us/downloads/visual-studio-2015-downl ...

  5. 九度oj 题目1063:整数和

    题目1063:整数和 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4043 解决:2638 题目描述: 编写程序,读入一个整数N.若N为非负数,则计算N到2N之间的整数和:若N为一个负数 ...

  6. 餐巾(cogs 461)

    [问题描述] 一个餐厅在相继的N天里,第i天需要Ri块餐巾(i=l,2,…,N).餐厅可以从三种途径获得餐巾. (1)购买新的餐巾,每块需p分: (2)把用过的餐巾送到快洗部,洗一块需m天,费用需f分 ...

  7. Linux下汇编语言学习笔记52 ---

    这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...

  8. ZOJ 2770_Burn the Linked Camp

    题意: 给定每个兵营的最大容量,以及第i到第j个兵营至少有多少个士兵,问所有兵营一共至少有多少个士兵? 分析: 差分约束系统,注意 第i到第j至少有k个 第i到第j最多有最大容量之和个 每个兵营至少有 ...

  9. Servlet的过滤器(Filter)

    以下内容引用自http://wiki.jikexueyuan.com/project/servlet/writing-filters.html: Servlet过滤器是Java类,可用于Servlet ...

  10. MongoDB小结06 - update【$push】

    数组修改器,既然名字都这样叫了,那么这个修改器就只能对数组进行操作啦. db.user.update({"name":"qianjiahao"},{" ...