牛客寒假算法基础集训营3 (部分)
作者:互联网
题目描述
处女座觉得自己手上的经费可能不太够,于是决定给牛逼学生们带家教。
一天他去上课用自己的火眼金睛感觉教室里有一个学生没有来,于是他就叫学生们报出自己的学号。
已知这个班上的学号是从1开始连续编号的,处女座告诉你这个班上有多少人,想问问你到底是谁没有来。
输入描述:
输入数据共两行,第一行为一个整数N,表示班上的学生数量。
第二行为一行N-1个整数,表示已经来的学生的学号,按升序给出。
输出描述:
输出一个整数,为没有来的学生的学号。
示例1
输入
3
1 3
输出
2
备注:
2≤N≤200,000
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <set>
#include <cstring>
#include <stack>
#include <vector>
#include <queue>
#define Swap(a,b) a ^= b ^= a ^= b
using namespace std ;
typedef long long LL;
const int MAX = 200005;
const int inf = 0xffffff;
const LL mod = 1e9+7 ;
int minn = 0x3f3f3f3f ;
int maxx = -0x3f3f3f3f;
// --------------------------------
LL book[MAX] ;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL),cout.tie(NULL);
LL n ;
cin >> n ;
for(LL i = 1 ; i<n ;i++ )
{
LL x ;
cin >>x ;
book[x] = 1 ;
}
for(LL i = 1 ; i<=n ;i++ )
{
if(!book[i])
{
cout<<i<<endl;
break ;
}
}
return 0;
}
链接:https://ac.nowcoder.com/acm/contest/329/D
来源:牛客网
题目描述
处女座靠着自己的家教本领赚够了去比赛的钱,于是开启了疯狂训练。在每个夜深人静第二天不收作业的夜晚,他都会开始刷题。
"今日又是一个刷题的夜晚。"他挑选了n道题开始刷,而题太多,刷不掉,理还乱(呜呜)、自己没有解决的题目每分钟都会给他带来bibi的疲倦值,而解决每一道题目都需要花费aiai分钟的时间。
当然,处女座一般都是考虑清楚了再写题的,所以他在写题的时候都会精神抖擞,也就是说,当前正在写的那一题并不会给他带来任何疲劳。
为了迎接后天要收的作业和明天要遇到的小姐姐,他想让今晚的刷题尽可能的轻松,那请你帮他找出最小所需要的疲倦值吧。
输入描述:
输入数据共包括n+1行,第一行包括一个n表示处女座今晚打算训练的题的数量。
接下来n行,每行包括两个整数ai,biai,bi,分别表示处女座刷掉本题要花费的时间和本题每分钟会带来的疲倦值。
输出描述:
一行包括一个整数,表示处女座今晚训练会产生的最小疲倦值。
示例1
输入
6
6 1
4 5
4 3
6 2
8 1
2 6
输出
86
说明
先做第6个题,增加(1+5+3+2+1)*2= 24 点疲倦值,再做第2个题,增加28点疲倦值,随后依次是第3,4,1,5道题,增加16,12,6点疲倦值。总共的疲倦值是24 + 28 + 16 + 12 + 6 = 86点。
备注:
2≤N≤105.
2≤ai≤4⋅106
1≤bi≤1000
贪心: 按照 a.b / a.a > b.b /b.b 排序 (单位时间疲劳值递减), 把它变成乘法.
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std ;
typedef long long LL;
const int MAX = 100005 ;
struct node{
LL a ;
LL b ;
};
bool cmp(const node &a , const node &b){
return a.a *b.b < a.b* b.a ;
}
node A[MAX] ;
int main(int argc, char const *argv[])
{
ios_base::sync_with_stdio(false);
cin.tie(NULL),cout.tie(NULL);
int n ;
cin >> n ;
for(int i =1 ; i<=n ;i++)
{
cin >>A[i].a >>A[i].b;
}
LL ans = 0 ;
sort(A+1,A+1+n,cmp);
LL t = 0 ;
for(int i = 1 ; i<=n ; i++){
ans +=A[i].b*t ;
//cout<<ans<<" " ;
t+=A[i].a;
}
cout<<ans<<endl;
return 0;
}
链接:https://ac.nowcoder.com/acm/contest/329/E
来源:牛客网
题目描述
既然昨天晚上处女座已经训练了,明天才要交作业,那今天就是平淡无奇要上课的一天了。
然而处女座也想自己的小姐姐了,可是这节课是老师安排座位,处女座坐在(1,1),而小姐姐坐在(n,m)。他们之间只能通过传纸条的方式来交流感情。对于处女座而言,他上课不想过度分心,因此并不想传纸条,只在那里趁机折千纸鹤。
老师上课喜欢用"开火车"的方式让大家轮流回答问题,显然处女座作为(1,1)位,会被第一个叫起来回答,之后老师将依次叫起(2,1),(3,1),….(n,1),(n,2),(n−1,2)⋯(1,2),⋯(2,1),(3,1),….(n,1),(n,2),(n−1,2)⋯(1,2),⋯的人起来回答问题,每个人回答问题需要1秒。处女座在自己回答完以后会以每秒1个千纸鹤的速度折叠,在小姐姐开始回答问题的时候停止折叠。
处女座想知道,他这节课一共要折多少个千纸鹤?
输入描述:
输入文件包含T+1行,第一行包含一个整数T,表示用例组数。
接下来T行,每行包含两个整数n,m表示小姐姐的位置和教室的大小。
输出描述:
对于每一组用例,用一行输出一个整数,表示处女座要折的千纸鹤的个数。
示例1
输入
1
3 3
输出
7
备注:
2≤n,m≤1,000.
题解: 本题相当于只要求按照开火车的顺序,从(1,1)到(
标签:include,const,小姐姐,int,LL,牛客,寒假,处女座,集训营 来源: https://blog.csdn.net/qq_41661809/article/details/86664958