Day_4

A.深度学习

题目描述

小 A 最近在研究深度学习,他自己搭建了一个很牛逼的神经网络,现在他手头一共有 n 组训练数据,一开始他会给自己的神经网络设置一个 batch size,假设为 B (1≤ B≤ n) ,每次训练他都会从手头的 n 组训练数据中抽取不同的 B 组数据,然后扔到神经网络去训练。
然而小 A 的服务器并不是特别支持并行,所以运行时间和 B 成正比,每一次训练都会花费 B 秒的时间。
现在小 A 发现这样每次随机选数据的话,从概率上讲要训练好多次才能使得每组训练数据都被选中过。小 A 是一个炼丹的新手,他觉得只要所有训练数据都被选中过,那么这个模型就会很牛逼,所以只要某次训练后,如果所有训练数据都被选中过,那么他就会停止进行训练。
现在他想合理地设置 B ,使得训练总时间的期望值尽可能地短,你只需要求出这个最小的期望值。

输入描述:

第一行一个正整数 n

输出描述:

输出一个实数,表示最小的期望值,本题有spj,只要和标准答案的标准误差在 10-3 以内就算正确

输入例子:
1
输出例子:
1.000000

-->

示例1

输入

1

输出

1.000000

备注:

1≤ n ≤ 40
解题思路:要使得期望值最小,那么B应该设置成n并且一次训练后所有训练数据都被选中,即最小的期望值为n。
AC代码:
 #include<bits/stdc++.h>
using namespace std;
double n;
int main(){
while(cin>>n){
cout<<setiosflags(ios::fixed)<<setprecision()<<n<<endl;
}
return ;
}

D.最小生成树

题目描述

小 A 有一张 n 个点的带权无向图,这张无向图非常特别,首先第 i 个点有一个点权 ai,之后这张无向图是一张完全图,且边 (u,v) 的权值为 au+av
现在小 A 想找一个这张图的边权之和最小的生成树,需要你来帮帮他

输入描述:

第一行一个正整数 n
第二行 n 个整数 a1,a2 … an

输出描述:

输出边权和最小的生成树的边权之和

输入例子:
3
1 2 3
输出例子:
7

-->

示例1

输入

3
1 2 3

输出

7

备注:

1≤ n≤ 10^5
0≤ a_i ≤ 10^9
解题思路:找带权值最小的点分别和其他n-1个点进行连线,即可组成最小生成树。
AC代码:
 #include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int maxn=1e5+;LL n,sum,a[maxn];
int main(){
while(cin>>n){
sum=;
for(LL i=;i<n;++i)cin>>a[i],sum+=a[i];
sort(a,a+n);sum-=a[];sum+=a[]*(n-);
cout<<sum<<endl;
}
return ;
}

G.区间权值

题目描述

小 Bo 有 n 个正整数 a1..an,以及一个权值序列 w1…wn,现在他定义$ f (l, r) = ( \sum_{i=l}^r a_i ) × w_{r - l + 1} $ 
现在他想知道$ \sum_{l = 1}^n \sum_{r = l}^n f(l, r) $ 的值,需要你来帮帮他
你只需要输出答案对 109+7 取模后的值

输入描述:

第一行一个正整数 n
第二行 n 个正整数 a1..an
第三行 n 个正整数 w1..wn

输出描述:

输出答案对 10^9+7 取模后的值

输入例子:
3
1 1 1
1 1 1
输出例子:
10

-->

示例1

输入

3
1 1 1
1 1 1

输出

10

备注:

1≤ n≤ 3e5
1≤ a_i ≤ 10^7
1≤ w_i ≤ 10^7
解题思路:手推构造两个前缀和数组,即可得到答案。
AC代码:
 #include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL mod=1e9+;
const int maxn=3e5+;int n;
LL ans,a[maxn],w[maxn],sum[maxn],tot[maxn];
int main(){
while(cin>>n){
sum[]=tot[]=ans=;
for(int i=;i<=n;++i)cin>>a[i],sum[i]=sum[i-]+a[i],tot[i]=(tot[i-]+sum[i])%mod;
for(int i=;i<=n;++i)cin>>w[i];
for(int i=;i<=n;++i)
ans=(ans+(tot[n]-tot[n-i]-tot[i-])*w[i]%mod+mod)%mod;
cout<<ans<<endl;
}
return ;
}

I.连通块计数

题目描述

小 A 有一棵长的很奇怪的树,他由 n 条链和 1 个点作为根构成,第 i 条链有 ai 个点,每一条链的一端都与根结点相连。
现在小 A 想知道,这棵长得奇怪的树有多少非空的连通子树,你只需要输出答案对 998244353 取模的值即可

输入描述:

第一行一个正整数 n
第二行 n 个正整数 a1 … an

输出描述:

输出答案对 998244353 取模后的值

输入例子:
2
1 1
输出例子:
6

-->

示例1

输入

2
1 1

输出

6

备注:

1≤ n≤ 10^5
1≤ a_i ≤ 10^7
解题思路:
AC代码:
 #include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL mod=;
LL n,ans,res,tp;
int main(){
while(cin>>n){
ans=;res=;
while(n--){
cin>>tp;
res=(res*(tp+))%mod;
ans=(ans+tp*(tp+)/)%mod;
}
cout<<(ans+res)%mod<<endl;
}
return ;
}

J.寻找复读机

题目描述

某个 QQ 群里一共有 n 个人,他们的编号是 1..n,其中有一些人本质上是复读机。
小 A 发现,如果一个人的本质是复读机,那么他每次发的消息一定跟群里的上一条消息一样,特别地第一个发消息的人一定不是复读机。
现在小 A 搞到了一份聊天记录,他想请你找出所有可能是复读机的群友

输入描述:

第一行两个正整数 n,m,表示群里的人数和聊天记录的总条数
接下来 m 行按时间顺序给出聊天记录,每行有一个正整数 x 和一个小写字母字符串 S,表示群友 x 发了消息 S

输出描述:

输出一行,将所有可能是复读机的群友的编号按照从小到大排序后输出,每两个编号之间隔一个空格

输入例子:
3 5
1 gugugu
2 gugugu
1 gugu
3 tingzhifudu
2 tingzhifudu
输出例子:
2

-->

示例1

输入

3 5
1 gugugu
2 gugugu
1 gugu
3 tingzhifudu
2 tingzhifudu

输出

2

备注:

1≤ n≤ 10^3
1≤ m≤ 10^3
1≤ |S|≤ 100
解题思路:因为是不容易找哪个是复读机(可能没发言的也是复读机),所以我们找不是复读机的群友--->不和群里上一条消息一样的人一定不是复读机,因此标记一下这些人,最后再按顺序输出是复读机的编号即可。
AC代码:
 #include<bits/stdc++.h>
using namespace std;
int n,m,x,y,st,cnt,ans[];string str,tmp;bool flag[];
int main(){
while(cin>>n>>m){
cin>>x>>str;st=x,cnt=;memset(flag,false,sizeof(flag));flag[x]=true;
while(--m){
cin>>y>>tmp;
if(tmp!=str)flag[y]=true;
x=y,str=tmp;
}
for(int i=;i<=n;++i)
if(!flag[i])ans[cnt++]=i;
for(int i=;i<cnt;++i)
cout<<ans[i]<<(i==cnt-?'\n':' ');
}
return ;
}

Day_5

G.贵族用户

题目描述

终于活成了自己讨厌的样子。
充钱能让你变得更强。
在暖婊这个游戏里面,如果你充了x元钱,那么你能获得10x个钻石。同时暖婊也有m档VIP,如果你往暖婊里面充了ai个钻石,那么你能成为第i档贵族用户。当你成为第i档贵族用户之后,那么你可以获得$ p_i $%的优惠。
你需要k件材料合成衣服,其中第i件材料原价为di个钻石,你一共需要ci件这种材料。当你获得p的优惠时,这个材料的真实价格为
请问栗子米最少需要氪多少钱,这里我们规定只能氪整数的钱。

输入描述:

第一行一个整数T(T≤ 1000),表示数据组数。
每组数据第一行两个整数m,k(1≤ m,k≤ 15)。
接下来m行每行两个正整数1≤ a_i ≤ 10^5, 1≤ p_i ≤ 100,保证a_i ≤ a_(i+1),p_i ≤ p_(i+1).

接下来k行每行两个正整数1≤ ci, di≤ 1000。

输出描述:

对于每组数据,输出一个整数,表示至少要氪多少钱。

输入例子:
1
1 1
100 100
100 100
输出例子:
10

-->

示例1

输入

1
1 1
100 100
100 100

输出

10
解题思路:遗忘补缺---精度处理!
AC代码:
 #include<bits/stdc++.h>
using namespace std;
int input(){
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<='')x=x*+ch-'',ch=getchar();
return f*x;
}
struct node1{int a,p;}nod1[];
struct node2{int c,d;}nod2[];
int T,m,k,ans,tmp;
int _ceil(int x){return x%==?x/:x/+;}
void solve(){
ans=;m=input();k=input();
for(int i=;i<m;++i)nod1[i].a=input(),nod1[i].p=input();
for(int i=;i<k;++i)nod2[i].c=input(),nod2[i].d=input(),ans+=nod2[i].c*nod2[i].d;
for(int i=;i<m;++i){
tmp=;
for(int j=;j<k;++j)
tmp+=_ceil(nod2[j].d*(-nod1[i].p))*nod2[j].c;
ans=min(ans,max(tmp,nod1[i].a));
}
printf("%d\n",ans%==?ans/:ans/+);
}
int main(){
T=input();
for(int i=;i<=T;i++)solve();
return ;
}

L.数论之神

题目描述

终于活成了自己讨厌的样子。

这是她们都还没长大的时候发生的故事。那个时候,栗子米也不需要为了所谓的爱情苦恼。
她们可以在夏日的午后,花大把的时间去研究生活中一些琐碎而有趣的事情,比如数论。
有一天西柚柚问了栗子米一个题,她想知道中有多少不同的数,这些不同的数字里面第k大的是多少。

输入描述:

第一行一个整数T(T≤ 10^5 ),表示数据组数。
每组数据第一行两个整数,表示n,k(1≤ n≤ 10^18),保证k不会超过不同的数字个数。

输出描述:

对于每组数据输出,输出两个整数,表示有多少个不同的数字和这里面第k大的是多少。

输入例子:
3
1 1
5 2
67 8
输出例子:
1 1
3 2
15 8

-->

示例1

输入

3
1 1
5 2
67 8

输出

1 1
3 2
15 8
解题思路:找规律发现一定是1,2,3,...,x,n/(x-1),n/(x-2),...,x是sqrt(n)附近,求出第k大即可。
AC代码:
 #include<bits/stdc++.h>
using namespace std;
typedef long long LL;
int t;LL n,k,x,y,tot,tp;
int main(){
while(cin>>t){
while(t--){
cin>>n>>k;
x=sqrt(n);
if(n/x!=x)tp=;
else tp=-;//多了一个重复的元素,增量为-1
tot=*x+tp;
k=tot-k+;//第k大的位置
if(k<=x)y=k;//y直接赋值为k
else y=n/(tot-k+);// n/(x-m)
cout<<tot<<' '<<y<<endl;
}
}
return ;
}

Day_6

B.board

题目描述

恬恬有一个nx n的数组。她在用这个数组玩游戏:
开始时,数组中每一个元素都是0。
恬恬会做某些操作。在一次操作中,她可以将某一行的所有元素同时加上一个值,也可以将某一列的所有元素同时加上一个值。
在几次操作后,一个元素被隐藏了。你能帮助她回忆隐藏的数是几吗?

输入描述:

第一行一个整数n(1≤ n≤ 1000)。
接下来n行每行n个整数表示数组a。
第(i+1)行的第j个元素表示a_i_j(a_i_j=-1或 0 ≤ a_i_j ≤ 10000)。-1表示隐藏的元素。

输出描述:

仅一个整数表示答案。

输入例子:
3
1 2 1
0 -1 0
0 1 0
输出例子:
1

-->

示例1

输入

3
1 2 1
0 -1 0
0 1 0

输出

1
解题思路:由于数据较小,记录-1这个元素的坐标,并将其赋值为1w,然后暴力模拟减一下,最后肯定只剩下这个元素(其余全为0),其值记为m',即被隐藏的值为1w-m'。
AC代码:
 #include<bits/stdc++.h>
using namespace std;
typedef long long LL;
int n,ex,ey,cnt,minv,mp[][];
int main(){
while(~scanf("%d",&n)){
memset(mp,,sizeof(mp));
for(int i=;i<n;++i){
for(int j=;j<n;++j){
scanf("%d",&mp[i][j]);
if(mp[i][j]==-)ex=i,ey=j,mp[i][j]=;
}
}
for(int i=;i<n;++i){
cnt=;minv=;
for(int j=;j<n;++j)
if(mp[i][j]>)cnt++,minv=min(minv,mp[i][j]);
if(cnt==n&&minv!=){
for(int j=;j<n;++j)
mp[i][j]-=minv;
}
}
for(int j=;j<n;++j){
cnt=;minv=;
for(int i=;i<n;++i)
if(mp[i][j]>)cnt++,minv=min(minv,mp[i][j]);
if(cnt==n&&minv!=){
for(int i=;i<n;++i)
mp[i][j]-=minv;
}
}
printf("%d\n",-mp[ex][ey]);
}
return ;
}

C.Circle

题目描述

现在我们要把1...n这n个数字首尾连接组成一个环,使得相邻元素互质的对数尽可能多。请输出最大对数。

输入描述:

一行一个整数n(1≤ n≤ 1000)。

输出描述:

一行一个整数表示答案。

输入例子:
4
输出例子:
4

-->

示例1

输入

4

输出

4

说明

样例的一种构造方法为1 4 3 2。
解题思路:把1放首位置,由于相邻的奇数和偶数肯定互质,所以把1...n这n个元素依次放入一个环就可以,即最大对数为n。
AC代码:
 #include<bits/stdc++.h>
using namespace std;
typedef long long LL;
int n;
int main(){
while(cin>>n){
cout<<n<<endl;
}
return ;
}

H.Mountain

题目描述

平面上有n座山,每座山都有左右两面,第i座山的高度为ai,现在弱弱在第一座山的左边山脚下(高度为0),他想要依此爬过这些山,到达第n座山的右边山脚下。
除了简单的爬上爬下,还有一种特殊操作。
如果弱弱目前在第i座山右面的海拔x的位置,且第j ( i < j )座山的海拔大于等于x,且第i + 1,...,j - 1座山中没有一座山的海拔高于x,那么他可以使用绳索滑到第j座山左面海拔x的位置。
弱弱想找到一种方式,使得他在行程中海拔变化的幅度最小。请输出最小幅度。

输入描述:

第一行一个整数n(1≤ n ≤ 1000)。
接下来一行n个整数a_i(1 ≤ a_i ≤ 1000)表示每座山的高度。

输出描述:

一行一个整数表示答案。

输入例子:
5
1 3 5 4 2
输出例子:
10

-->

示例1

输入

5
1 3 5 4 2

输出

10
解题思路:最小幅度一定是最高山的高度的两倍。
AC代码:
 #include<bits/stdc++.h>
using namespace std;
typedef long long LL;
int n,ans,m;
int main(){
while(cin>>n){
ans=;
for(int i=;i<n;++i)cin>>m,ans=max(ans,m);
cout<<ans*<<endl;
}
return ;
}

牛客国庆集训派对Day_4~6的更多相关文章

  1. 牛客国庆集训派对Day6 A Birthday 费用流

    牛客国庆集训派对Day6 A Birthday:https://www.nowcoder.com/acm/contest/206/A 题意: 恬恬的生日临近了.宇扬给她准备了一个蛋糕. 正如往常一样, ...

  2. 2019牛客国庆集训派对day5

    2019牛客国庆集训派对day5 I.Strange Prime 题意 \(P=1e10+19\),求\(\sum x[i] mod P = 0\)的方案数,其中\(0 \leq x[i] < ...

  3. 牛客国庆集训派对Day1 L-New Game!(最短路)

    链接:https://www.nowcoder.com/acm/contest/201/L 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 1048576K,其他语言20 ...

  4. 牛客国庆集训派对Day4 J-寻找复读机

    链接:https://www.nowcoder.com/acm/contest/204/J 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 1048576K,其他语言20 ...

  5. 牛客国庆集训派对Day4 I-连通块计数(思维,组合数学)

    链接:https://www.nowcoder.com/acm/contest/204/I 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 1048576K,其他语言20 ...

  6. 牛客国庆集训派对Day1-C:Utawarerumono(数学)

    链接:https://www.nowcoder.com/acm/contest/201/C 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 1048576K,其他语言20 ...

  7. 牛客国庆集训派对Day2 Solution

    A    矩阵乘法 思路: 1° 牛客机器太快了,暴力能过. #include <bits/stdc++.h> using namespace std; #define N 5000 in ...

  8. 2019 牛客国庆集训派对day1-C Distinct Substrings(exkmp+概率)

    链接:https://ac.nowcoder.com/acm/contest/1099/C来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536 ...

  9. 2018 牛客国庆集训派对Day4 - H 树链博弈

    链接:https://ac.nowcoder.com/acm/contest/204/H来源:牛客网 题目描述 给定一棵 n 个点的树,其中 1 号结点是根,每个结点要么是黑色要么是白色 现在小 Bo ...

随机推荐

  1. 浅谈JavaScript的函数表达式(闭包)

    前文已经简单的介绍了函数的闭包.函数的闭包就是有权访问另一个函数作用域的函数,也就是函数内部又定义了一个函数. var Super=function(num){ var count=num; retu ...

  2. Scaling with Microservices and Vertical Decomposition

    Scaling with Microservices and Vertical Decomposition – dev.otto.de https://dev.otto.de/2014/07/29/s ...

  3. 用Qt编写的计算文件MD5值的Demo

    Dialog.ui <?xml version="1.0" encoding="UTF-8"?> <ui version="4.0& ...

  4. HDU 6122 今夕何夕 【数学公式】 (2017"百度之星"程序设计大赛 - 初赛(A))

    今夕何夕 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  5. Memory cycles about Block

    Block keeps a strong point to all object referenced in side of them, so all object will stay in heap ...

  6. (C)inline关键字

      背景(C&C++中) 一.inline关键字用来定义一个类的内联函数,引入它的主要原因是用它替代C中表达式形式的宏定义. 表达式形式的宏定义一例:#define ExpressionNam ...

  7. SDUT OJ 2054 双向链表的实现 (结构体node指针+遍历 *【模板】)

    双向链表 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 学会了单向链表,我们又多了一种解决问题的能力,单链表利用一个指针就能在内 ...

  8. CentOS7 安装和配置Tomcat

    1.官网下载Tomcat的压缩包 https://tomcat.apache.org/download-70.cgi 2.使用Xftp5把下载的压缩包上传到 /usr/soft (soft文件夹自己新 ...

  9. SpringMVC配置环境中一般用的jar包

    配置SpringMVC需要把这些jar包加入lib目录下 下载地址,复制到地址栏.回车即可下载 http://files.cnblogs.com/files/QW-lzm/SpringMVC----. ...

  10. codeforces 450B. Jzzhu and Sequences 解题报告

    题目链接:http://codeforces.com/problemset/problem/450/B 题目意思:给出 f1 和 f2 的值,以及n,根据公式:fi = fi-1 + fi+1,求出f ...