犁田机器人
背景 Background
USACO OCT 09 2ND
描述 Description
Farmer John為了让自己从无穷无尽的犁田工作中解放出来,於是买了个新机器人帮助他犁田。这个机器人可以完成犁田的任务,可惜有一个小小的缺点:这个犁田机器人一次只能犁一个边的长度是整数的长方形的田地。
因為FJ的田地有树和其他障碍物,所以FJ设定机器人去犁很多不同的长方形。这些长方形允许重叠。他给机器人下了P个指令,每个指令包含一个要犁长方形的地。这片田地由长方形的左下角和右上角坐标决定。他很好奇最后到底有多少个方格的地被犁过了。
一般来说,田地被分割為很多小方格。这些方格的边和x轴或y轴平行。田地的宽度為X个方格,高度為Y个方格 (1 <= X <= 240; 1 <= Y <= 240). FJ执行了I (1 <= I <= 200)个指令,每个指令包含4个整数:Xll, Yll, Xur, Yur (1 <= Xll <=Xur; Xll <= Xur <=X; 1 <= Yll <= Yur; Yll <= Yur <= Y), 分别是要犁的长方形的左下角坐标和右上角坐标。机器人会犁所有的横坐标在Xll..Xur并且纵坐标Yll..Yur范围内的所有方格的地。可能这个长方形会比你想像的多一行一列(就是说从第Xll列到第Xur列一共有Xur - Xll + 1列而不是Xur - Xll列)。
考虑一个6方格宽4方格高的田地。FJ进行了2个操作(如下),田地就被成"*"和"#"了。虽然一般被犁过的地看起来都是一样的。但是标成"#"可以更清晰地看出最近一次被犁的长方形。
...... **.... #####.
...... (1,1)(2,4) **.... (1,3)(5,4) #####.
...... **.... **....
...... **.... **....
一共14个方格的地被犁过了。
输入格式 InputFormat
* 第一行: 三个由空格隔开的整数: X, Y, I
* 第二行到第I+1行:第i+1行有四个整数Xll, Yll, Xur, Yur,表示第i个指令。
输出格式 OutputFormat
第一行: 一个单独的整数表示被犁过的方格数。
样例输入 SampleInput [复制数据]
6 4 2
1 1 2 4
1 3 5 4
样例输出 SampleOutput [复制数据]
14
#include
int p[1200][1200];
int main()
{
int i,j,t,X,Y,I,x1,x2,y1,y2;
scanf("%d%d%d",&X,&Y,&I);
for(i=1;i<=I;i++)
{
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
for(j=x1;j<=x2;j++)
for(t=y1;t<=y2;t++)
{
p[j][t]=1;
}
}
int sum=0;
for(i=1;i<=X;i++)
for(j=1;j<=Y;j++)
if(p[i][j]==1)
sum++;
printf("%d\n",sum);
}
不高兴的津津
描述 Description
津津上初中了。妈妈认为津津应该更加用功学习,所以津津除了上学之外,还要参加妈妈为她报名的各科复习班。另外每周妈妈还会送她去学习朗诵、舞蹈和钢琴。但是津津如果一天上课超过八个小时就会不高兴,而且上得越久就会越不高兴。假设津津不会因为其它事不高兴,并且她的不高兴不会持续到第二天。请你帮忙检查一下津津下周的日程安排,看看下周她会不会不高兴;如果会的话,哪天最不高兴。
输入格式 InputFormat
输入包括七行数据,分别表示周一到周日的日程安排。每行包括两个小于10的非负整数,用空格隔开,分别表示津津在学校上课的时间和妈妈安排她上课的时间。
输出格式 OutputFormat
输出包括一行,这一行只包含一个数字。如果不会不高兴则输出0,如果会则输出最不高兴的是周几(用1, 2, 3, 4, 5, 6, 7分别表示周一,周二,周三,周四,周五,周六,周日)。如果有两天或两天以上不高兴的程度相当,则输出时间最靠前的一天。
样例输入 SampleInput [复制数据]
5 3
6 2
7 2
5 3
5 4
0 4
0 6
样例输出 SampleOutput [复制数据]
3
#include
int main()
{
int i,a,b,t=0,k;
for(i=1;i<=7;i++)
{
scanf("%d%d",&a,&b);
if(a+b>8&&t==0)
{
t++;
k=i;
}
}
printf("%d\n",k);
}
数字统计
背景 Background
NOIP2010普及组复赛第一题
描述 Description
请统计某个给定范围[L, R]的所有整数中,数字2 出现的次数。
比如给定范围[2, 22],数字2 在数2 中出现了1 次,在数12 中出现1 次,在数20 中出
现1 次,在数21 中出现1 次,在数22 中出现2 次,所以数字2 在该范围内一共出现了6
次。
输入格式 InputFormat
输入共1 行,为两个正整数L 和R,之间用一个空格隔开。
输出格式 OutputFormat
输出共1 行,表示数字2 出现的次数。
【输入样例1】
2 22
【输入样例2】
2 100
输出样例1:
6
输出样例2:
20
数据范围和注释 Hint
【数据范围】
1 ≤ L ≤ R≤ 10000。
#include
int sum=0;
void is(int dat)
{
int qian,bai,shi,ge;
qian=dat/1000;
bai=(dat-qian*1000)/100;
shi=(dat-qian*1000-bai*100)/10;
ge=dat;
if(qian==2)
sum++;
if(bai==2)
sum++;
if(shi==2)
sum++;
if(ge==2)
sum++;
}
int main()
{
int i,L,R;
scanf("%d%d",&L,&R);
for(i=L;i<=R;i++)
is(i);
printf("%d\n",sum);
}
笨小猴
背景 Background
NOIP2008复赛提高组第一题
描述 Description
笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼。但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大!
这种方法的具体描述如下:假设maxn是单词中出现次数最多的字母的出现次数,minn是单词中出现次数最少的字母的出现次数,如果maxn-minn是一个质数,那么笨小猴就认为这是个Lucky Word,这样的单词很可能就是正确的答案。
输入格式 InputFormat
输入只有一行,是一个单词,其中只可能出现小写字母,并且长度小于100。
输出格式 OutputFormat
输出共两行,第一行是一个字符串,假设输入的的单词是Lucky Word,那么输出“Lucky Word”,否则输出“No Answer”;
第二行是一个整数,如果输入单词是Lucky Word,输出maxn-minn的值,否则输出0。
输入样例1
error
输入样例2
olympic
输出样例1
Lucky Word
2
输出样例2
No Answer
0
#include
#include
#include
int prime(int x)
{
int t,b;
b=sqrt(x);
if(x==1)
return 0;
for(t=2;t<=b;t++)
if(x%t==0)
return 0;
return 1;
}
int main()
{
char p[1200];
int i,j,n,f[27]={0},q[27]={0},maxn=0,minn=0x7fffffff;
gets(p);
n=strlen(p);
for(i=0;i<=n-1;i++)
f[p[i]-'a'+1]++; //出现次数
for(i=1;i<=26;i++)
{
if(maxn
maxn=f[i];
if(minn>f[i]&&f[i]!=0)
minn=f[i];
}
if(prime(maxn-minn)==1&&maxn!=minn)
printf("Lucky Word\n%d\n",maxn-minn);
else printf("No Answer\n0\n");
}