福到年到
过年了,有 n个小朋友,参加了集五福活动,集训队辉姐姐"福"特别特别多,要给小朋友们送一些 "福" ,辉姐姐会发放m次,每次有三个参数 l , r , k ( 1 ≤ l ≤ r ≤ n ≤1e5 ,1 ≤ k ≤ 5,0<=m<=1e5) ,表示给区间 [l,r] 内的小朋友都发一个福 k(众所周知有5种“福”) ,那么问题来了,在经过辉姐姐这 m次操作之后,对于每一个小朋友,回答他接受的福中,出现次数最多的福是什么。如果有多个,输出编号最小的那个;如果他没有"福",输出 -1 。
Input
单组输入第一行输入 n ,m分别代表小朋友数与发放次数
接下来 m行每行 3 个整数分别代表 l ,r ,k。
Output
根据题目要求输出一行,n个数表示n个小朋友信息。
Sample Input
5 3 1 2 1 3 3 1 1 3 2
Sample Output
1 1 1 -1 -1
Hint
配图转自:https://twitter.com/yumu_uri/status/1079754707780935682
Source
Infiniti
提示:请想一维情况,题目是这样的,一个小姐姐给n个小朋友发m次糖果每次发糖果数为k,第i次发糖果区间为[li,ri];最后文每一位小盆友手中的糖果数。显然,每次从[li,ri]遍历是可行的,但时间复杂度为O(m*n);当n与m很大时很容易,TLE(运行超时),优化方法为:每次发糖果的区间为[li,ri],那么sum[li]+=k;sum[ri+1]-=k;然后sum[i]+=sum[i-1];只需遍历一次,时间复杂度降为O(n),此题也可用此方法,降低时间复杂度。
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
struct node
{
int A[6];
}que[100010];
int main()
{
int n,m,k;
int l,r;
while(cin>>n>>m)
{
memset(que,0,sizeof(que));
for(int i=0;i<m;i++)
{
cin>>l>>r>>k;
que[l].A[k]++;
que[r+1].A[k]--;
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=5;j++)
{
que[i].A[j]+=que[i-1].A[j];
}
}
for(int i=1;i<=n;i++)
{
int tmp=0;
for(int j=1;j<=5;j++)
{
if(que[i].A[j]>tmp)
{
que[i].A[0]=j;
tmp=que[i].A[j];
}
}
}
for(int i=1;i<=n;i++)
{
if(i!=1)
{
cout<<" ";
}
if(!que[i].A[1])
{
printf("-1");
}
else
{
cout<<que[i].A[0];
}
}
cout<<endl;
}
return 0;
}
五福临门之敬业福
Time Limit: 1000 ms Memory Limit: 65536 KiB
Problem Description
众所周知 “7989”学长是非常敬业的,从来都不会 “咕掉”( 缺席 ) 每一场 cf 比赛,一场cf 比赛有两个参数 ai 表示参加第 i 场比赛 之前的知识准备时间,bi表示第 i 场比赛的开始时间,”7989“学长想要打出更好的成绩,每一场比赛都要进行充分的准备,(每场比赛的时间都为2小时),“7989”学长能否充分准备好参加所有比赛,如果能输出 YES ,不能输出 NO。(注意每一时刻只能做一件事,每一时刻只能为一场比赛作准备,不可以在比赛时间进行知识准备,具体某一时刻进行哪一场的比赛准备由你来决定,每一场比赛需要准备的知识不相同。)
Input
第一行一个整数n( 0
第二行n个数分别代表 a[ i ] (0
第三行n个数分别代表 b[ i ] (0
Output
根据题意输出 YES 或 NO
Sample Input
3 1 3 2 1 10 5
Sample Output
YES
Hint
每场比赛开始时间未必按照顺序给出,只要在每一场比赛之前进行完这场比赛的知识准备即可
例如 :如果某场比赛的知识准备是2小时,这2小时只要总和够两小时即可。
Source
Infiniti
【思考】,从0点开始(隐含条件)准备时间,比赛,比赛完了,准备比赛,比赛,。。。。在一维时间轴上平铺这些事件,看能否安排的下,就可以了,按比赛开始时间排序,遍历,比赛中间空余时间是否能够准备下一场比赛,
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
struct node
{
int readytime,starttime;
bool operator < (const node &x)const
{
return starttime<x.starttime;
}
}que[1010];
int main()
{
int n;
while(cin>>n)
{
for(int i=0;i<n;i++)
{
cin>>que[i].readytime;
}
for(int i=0;i<n;i++)
{
cin>>que[i].starttime;
}
sort(que,que+n);
int flag=1;
int time=0; //当前时间
for(int i=0;i<n;i++)
{
if(que[i].starttime-time<que[i].readytime)
{
flag=0;
break;
}
else
{
time=que[i].starttime+2;
}
}
if(flag)
{
cout<<"YES"<<endl;
}
else
{
cout<<"NO"<<endl;
}
}
return 0;
}
五福临门之友善福
Time Limit: 1000 ms Memory Limit: 65536 KiB
Problem Description
集训队有一位”啊牛“学长,待人非常友善,俗话说的好 ”好牛有好报“ ,”阿牛“学长有n个好朋友,“阿牛”学长对待
n个好朋友有不同的友善值分别用a[ i ]来表示,现在各位好朋友要回报”啊牛“学长了,规则是(友善值 > 60)的好朋友 会给”阿牛“学长一个友善福,那么”啊牛“学长最终能获得多少友善福呢。
Input
第一行输入一个整数 n (0
第二行 n个整数 a [ i ]分别代表对待第i位好朋友的友善值(0
Output
输出一个整数代表”啊牛“学长最终获得的友善福数
Sample Input
5 66 66 99 1 1
Sample Output
3
Hint
Source
Infiniti
【简单题】
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
int n,a;
int sum;
while(cin>>n)
{
sum=0;
for(int i=0;i<n;i++)
{
cin>>a;
if(a>60)
{
sum++;
}
}
cout<<sum<<endl;
}
return 0;
}
五福临门之爱国福
Time Limit: 1000 ms Memory Limit: 65536 KiB
Problem Description
又到了一年一度的集福卡的时候了,但是x一直没能集到爱国福,一想到这有可能影响到自己分得5亿,从此走向人生巅峰,x就十分的头疼。
一天,x同学从某个不知名的小论坛得到了一个据说可以提升自己获得爱国福几率的方法,那就是不停的重复 “我爱中华” ,获得信仰之力的加成,但是他现在沉迷拜年祭,于是希望借助计算机来完成这个任务。
Input
一个数字n,代表x想要重复的次数。
Output
输出n行,每行一句“I love China."。(不包含引号)
Sample Input
2
Sample Output
I love China. I love China.
Hint
配图转自:https://www.pixiv.net/member_illust.php?mode=medium&illust_id=72786543
Source
行走的二叉树
[思考]签到题
#include <iostream>
using namespace std;
int main()
{
int n;
while(cin>>n)
{
while(n--)
{
cout<<"I love China."<<endl;
}
}
return 0;
}
五福临门之富强福
Time Limit: 1000 ms Memory Limit: 65536 KiB
Problem Description
一说到富强福,我就想到了…………
想啥呢小老弟,不开花不开花。
集福卡费时费力,最终分到的钱又十分的玄学,因此有人在网上干起了贩卖福卡的生意,而对一些福卡贩子来说,你还可以与他换福卡来获得优惠的价格。
而令 Jerry 同学非常不爽的是他每次扫福字都会获得富强福,经过若干天的努力,他获得了无数的富强福,但这并不能帮 Jerry 获得奖金,于是,Jerry 尝试通过买卖福卡的方式集齐五福。当然,Jerry 希望花尽量少的钱去购买福卡,你能帮他算一下集齐五福最少需要多少钱么?
Input
输入 5 行5列,第 i 行 j 列的数代表用 i 福卡换 j 福卡所需要的花费。
其中富强福为1号福卡。
Output
输出一个整数代表换齐五福所需要的最少花费。
Sample Input
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
Sample Output
4
Hint
Source
行走的二叉树
【思考】,最短路
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int Map[5][5];
int dis[6];
#define MAX 0x3f3f3f3f
int main()
{
for(int i=1;i<5;i++)
dis[i]=MAX;
dis[0]=0;
for(int i=0; i<5; i++)
{
for(int j=0; j<5; j++)
{
cin>>Map[i][j];
}
}
for(int i=0;i<5;i++)
Map[i][i]=0;
for(int i=1; i<5; i++)
{
dis[i]=Map[0][i];
}
for(int i=1; i<5; i++)
{
for(int j=0; j<5; j++)
{
if(dis[i]>Map[j][i]+dis[j])
{
dis[i]=Map[j][i]+dis[j];
}
}
}
int sum=0;
for(int i=1;i<5;i++)
{
sum+=dis[i];
}
cout<<sum<<endl;
return 0;
}
五福临门之和谐福
Time Limit: 1000 ms Memory Limit: 65536 KiB
Problem Description
“hello,大家好。在今天这个喜庆的日子,我们邀请了一位著名的人物来跟我们一起欢度新年,他就是大名鼎鼎的名侦探——夏洛克~D。同时,他也会给我们带来一张可以代替任何福卡的万能福。”
WOW~WOW~WOW
“您好,夏洛克先生。能不能跟大家分享一下您是怎么在刚刚在而立之年就为一名大名鼎鼎的探长的?”
“相比之下,我更喜欢别人叫我D先生。说起来,在我小的时候,还并没有想过成为一名侦探。那是我刚成年的夏夜吧。我忘不了那个晚上,我记得那晚的夜色特别美,我向我喜欢的人表白了,美妙的是,他也答应了我。那一刻,皎洁的月光洒在了我们身上,天上的圆月都好像在祝福我们。我们相拥着向星星许愿,都说月明星稀,但我记得,那晚的十字星格外闪耀。不过,那时晚上天气已经有些凉了。我们打算去找一家旅馆,但是,但是你知道吗,我的钱包让那个万死不赦的小偷偷走了,哦,现在想来我还隐隐心痛,他认为我不是男子汉,哦,呜呜呜”
“咳咳,真是让人感动的故事,您真是一个传奇的人物。那么,今天来到这,您有没有做过一些准备呢?比如为大家表演些什么”
“表演到没有,不过我带来了一个挑战。能通过挑战的人才能得到我的认可,就可以得到我的礼物,一张神奇的万能福。”
“看来今天的重头戏到了。不过这个形式还真是有趣,那么这个挑战是什么呢?”
“你知道的,一个侦探,必须要会察言观色,甚至读心术。我现在心里想了三个数字。如果你能准确无误的才出来,你就算通过这个挑战了。当然如果什么也不提示你们也并不合情。这三个数字都在1-10之间,且非递减的。怎么样?是不是感觉简单了不少?”
“这,可是还有很多可能,这不是只能瞎猜吗?您要不再给点提示。”
“提示?我已经给的够多了。如果你够相信的人品的话,说不定你就猜到了吗?我一向认为幸运也是实力的一部分。可如果,你不是天选的幸运儿的话,就拿点让我眼前一亮的东西吧。用你的才情和机智来过我这一关,拿到这一张福卡。毕竟,答案就在我身上。”
Input
无
Output
一行三个整数,中间以空格分割
Sample Input
Sample Output
10 10 10
Hint
示例输出并不是标准答案
出题人:本题为推理题,不是瞎猜。
Source
cat_of_orange
【思考】1000个人心中有1000个哈姆雷特,测试服务器压力题?