1.标题:第几天
2000年的1月1日,是那一年的第1天。
那么,2000年的5月4日,是那一年的第几天?
解法:
直接点开电脑日历或者口算
---------------------------------------------------------------------------
2,.标题:方格计数
如图p1.png所示,在二维平面上有无数个1x1的小方格。
我们以某个小方格的一个顶点为圆心画一个半径为1000的圆。
你能计算出这个圆里有多少个完整的小方格吗?
解法:
分为4块,拆分为x与y,当对角线小于半径时块数+1,一层一层算
8.小明维护着一个程序员论坛。现在他收集了一份"点赞"日志,日志共有N行。其中每一行的格式是:
ts id
表示在ts时刻编号id的帖子收到一个"赞"。
现在小明想统计有哪些帖子曾经是"热帖"。如果一个帖子曾在任意一个长度为D的时间段内收到不少于K个赞,小明就认为这个帖子曾是"热帖"。
具体来说,如果存在某个时刻T满足该帖在[T, T+D)这段时间内(注意是左闭右开区间)收到不少于K个赞,该帖就曾是"热帖"。
给定日志,请你帮助小明统计出所有曾是"热帖"的帖子编号。
【输入格式】
第一行包含三个整数N、D和K。
以下N行每行一条日志,包含两个整数ts和id。
对于50%的数据,1 <= K <= N <= 1000
对于100%的数据,1 <= K <= N <= 100000 0 <= ts <= 100000 0 <= id <= 100000
解法:
import java.util.*;
public class No_8_2018
{
public static void main(String args[])
{
Scanner s=new Scanner(System.in);
int k=0,n=0,d=0,ksum=0,maxts=0,mints=0,pidno=0;
int[] ts,id,flag,pid;
n=s.nextInt();
d=s.nextInt();
k=s.nextInt(); //输入基本参数
ts=new int[n];
id=new int[n];
flag=new int[n];
pid=new int[n];
for(int i=0;i<n;i++)
{
flag[i]=0;
}
for(int i=0;i<n;i++)
{
ts[i]=s.nextInt();
id[i]=s.nextInt();
}
for(int i=0;i<=n-1;i++)
{
maxts=ts[i];//确定时间最大和最小,当时间差小于规定时间,才进行输出(这里有点问题,题目要求的是一个区间)
mints=ts[i];
if(i==n-1&&flag[i]==0)
{
ksum++;
continue;
}
if(flag[i]==1)
{
continue;
}
ksum++;
for(int j=i+1;j<n;j++)
{
if(id[i]==id[j])
{
ksum++;
flag[j]=1;
if(ts[i]<ts[j])
{
maxts=ts[j];
}
if(ts[i]>ts[j])
{
mints=ts[i];
}
}
}
if(ksum>=k)
{
if((maxts-mints)<d)
{
pid[pidno]=id[i];
pidno++;
}
}
ksum=0;
}
for(int i=0;i<pidno;i++)
{
for(int j=0;j<pidno-1-i;j++)
{
if(pid[j]>pid[j+1])
{
int temp=0;
temp=pid[j];
pid[j]=pid[j+1];
pid[j+1]=temp;
}
}
}
for(int i=0;i<pidno;i++)
{
System.out.println(pid[i]);
}
}
}