题意:
给出hh:mm格式的时间,问至少经过多少分钟后,该时刻为回文字符串?
思路:
简单模拟,从当前时刻开始,如果hh的回文rh等于mm则停止累计。否则,根据rh和mm的大小来累计sum,然后hh+1,不断尝试。
#include<iostream>
using namespace std;
int main()
{
int hh,mm;
char c;
while (cin >> hh >> c >> mm)
{
int sum = ;
bool firsthour = true;
while ()
{
int rh = hh % * + hh / ;
if (rh == mm) break;
else
{
if (rh < )
{
if (firsthour)
{
firsthour = false;
if (rh >= mm)
{
sum += rh - mm;
break;
}
else
{
sum += - mm;
mm = ;
hh = (hh + ) % ;
}
}
else
{
sum += rh;
break;
}
}
else
{
if (firsthour) sum += - mm,mm=,firsthour=false;
else sum += ;
hh = (hh + ) % ;
} }
}
cout << sum << endl;
}
return ;
}
A. Karen and Morning
题意:
给出n个已知区间,然后询问q个区间,问询问区间中至少被k个已知区间包含的点为几个。
思路:
一开始想着对每个已知区间中的值累加,然后对每次询问[l,r],遍历l——r,妥妥超时~~
然后看了些大神的代码,首先不必要对每个已知区间中的值累加,只要在已知区间的开始和结束的位置做标记,然后对于查询,可以预处理用前缀和来记录1~i满足条件的数目,然后O(1)便能得出答案。还有的巨巨用线段树来维护,至少比O(n)的时间少,应该是O(logn)吧。。。
下面给出巨巨的链接: