目录

A - Jessica's Reading Problem

B - Bound Found

C - Subsequence

D - Tallest Cow

E - Straight Master

F - 非常男女

G - 矩形A + B


A - Jessica's Reading Problem

题意:

杰西卡要掌握一本厚厚的教科书中包含的所有思想。其中有些观点被多次提及。杰西卡认为,如果她能把每个想法至少读一次,她就能通过考试。她决定只读这本书的一个连续部分,其中包含了整本书涵盖的所有思想。当然,子手册应该尽可能薄。

一个非常勤劳的男孩为她手工索引了杰西卡教科书的每一页,每一页都有什么想法,因此他的求爱取得了很大的进展。这里你来拯救你的皮肤:给定索引,帮助杰西卡决定她应该阅读哪一部分。为了方便起见,每个想法都用一个ID编码,ID是一个非负整数。

思路:

尺取法查找,这里注意要去重后才是要看的页数

代码:

#include<iostream>
#include<cstdio>
#include<set>
#include<map>
#include<algorithm>
using namespace std;int a[1000005];
int main()
{int n;set<int>s;map<int,int>mp;scanf("%d",&n);for(int i=0;i<n;i++){scanf("%d",&a[i]);s.insert(a[i]);}int len=s.size(); //去重后,要看的页数int l=0,r=0;int sum=0;int minn=n;while(l<n){while(r<n&&sum<len) //不停的向右移动 直到出现的页数==len{if(mp[a[r]]==0)sum++;mp[a[r++]]++;}if(sum<len) //r移动出去了break;minn=min(minn,r-l);mp[a[l]]--; //l右移动if(mp[a[l++]]==0) //当l肯定没答案的时候sum--;}printf("%d\n",minn);
}

B - Bound Found

题意:

给你n个数,q次询问,每次询问给出一个t,让你从中找出一个非空区间,使得区间和的绝对值与t最接近。

思路:

我们可以求出前缀和数组,对前缀和数组排序,对于一个左端点l,找出第一个右端点r,满足区间对应的值>=t,对于左端点 l 区间和绝对值最接近t的就在此时的r和r-1处中取,只需要在r在递增的过程中不停的更新最小值即可。

代码:

#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;struct node
{int p;int sum;
}pre[100000];int num[100000];bool cmp(node x,node y)
{return x.sum<y.sum;
}int main()
{int n,k,i,t;while(1){scanf("%d%d",&n,&k);if(n==0&&k==0)break;pre[0].p=0;pre[0].sum=0;for(i=1;i<=n;i++){scanf("%d",&num[i]);pre[i].p=i;pre[i].sum=pre[i-1].sum+num[i];}sort(pre,pre+n+1,cmp);while(k--){scanf("%d",&t);int left=0,right=1,all,ansl,ansr,ans,min=0x3f3f3f3f;while(left<=n&&right<=n){all=pre[right].sum-pre[left].sum;if(abs(all-t)<min){min=abs(abs(all)-t);ans=all;ansl=pre[right].p<pre[left].p?pre[right].p+1:pre[left].p+1;ansr=pre[right].p>pre[left].p?pre[right].p:pre[left].p;}if(all<t)right++;else if(all>t)left++;elsebreak;if(left==right)right++;}printf("%d %d %d\n",ans,ansl,ansr);}}return 0;
}

C - Subsequence

题意:

给出了N个正整数(10<N<100000)的序列,每个正整数小于或等于10000,以及一个正整数S(S<100000)。编写一个程序,求序列中连续元素的子序列的最小长度,其和大于或等于S。

思路:

在区间和内进行尺取端点

代码:

#include<iostream>
#define inf 0x3f3f3f3f
using namespace std;
int a[100005],sum[100005];
int main()
{int t;cin>>t;while(t--){long long n,s;cin>>n>>s;for(int i=0;i<n;i++)cin>>a[i];long long minn=inf;long long l=0,r=0,sum=0; // 初始化左、右边界、区间和while(true){while(r<n&&sum<s)sum+=a[r++]; //计算区间和if(sum<s)   //如果小于S说明找不到>=S的情况,直接breakbreak;minn=min(minn,r-l);  //更新区间sum-=a[l++]; //右移l}if(minn==inf)cout<<0<<endl;elsecout<<minn<<endl;}
}

D - Tallest Cow

题意:

FJ的N(1)≤ N≤ 牛排成一行。每头牛都有一个正整数的高度(这有点秘密)。您只被告知高度H(1≤ H≤ 1000000)以及该奶牛的指数I。

FJ已列出R(0≤ R≤ 10000)行,形式为“奶牛17看到奶牛34”。这意味着34号奶牛至少和17号奶牛一样高,17到34号之间的每头奶牛的高度都比17号奶牛的高度要小。

对于1..N范围内的每头母牛,确定其最大可能高度,以便给出的所有信息仍然正确。可以保证满足所有约束条件。

思路:

前缀和、差分

对区间进行操作,x看到y,相当于对x-y中间的高度减一,差分数组表示为a[x+1]- -, b[y]++;
第一个的高度为H(因为求最高的时候全部的高度初始化为H),接下来进行前缀和求每个牛对应的高度并且输出即可。

还有其他做法

POJ-3263:Tallest Cow(差分)_点点滴滴-CSDN博客

代码:

#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
int N,I,H,R;
int a[10010];
bool vis[10010][10010];
int main()
{scanf("%d%d%d%d",&N,&I,&H,&R);a[0]=H;while(R--){int x,y;scanf("%d%d",&x,&y);if(x>y)swap(x,y);if(vis[x][y])continue;vis[x][y]=true;a[x+1]--;a[y]++;}int sum=a[0];for(int i=1; i<=N; i++){sum+=a[i];printf("%d\n",sum);}return 0;
}

E - Straight Master

题意:

给出N种类的数量,求是否可以把N种牌按3-5张连续的顺子打出,顺子必须连续.

思路:

差分思路,不明白题意和差分可以看看下面连接

Straight Master Gym - 101775J (差分的应用)_untilyouydc-CSDN博客

代码:

#include<iostream>
#include <cstdio>
#include<algorithm>
using namespace std;
const int MAXN = 200005;
int a[MAXN],b[MAXN];int main()
{int T,N;scanf("%d",&T);for(int cnt=1 ; cnt<=T ; cnt++){scanf("%d",&N);for(int i=1 ; i<=N ; i++)scanf("%d",&a[i]);a[N+1] = 0;for(int i=1 ; i<=N+1 ; i++)b[i] = a[i] - a[i-1];bool flag = true;if(b[1]<0 || b[2]<0 || b[3]<0)flag = false;else{long long sum = 0;for(int i=1 ; i<=N+1 ; i++){if(b[i] > 0)sum += b[i];int t = i + 3;if(t > N+1)break;if(b[t] < 0){sum += b[t];b[t] = 0;}if(sum < 0)break;}if(sum != 0)flag = false;}if(flag)printf("Case #%d: Yes\n",cnt);elseprintf("Case #%d: No\n",cnt);}return 0;
}

F - 非常男女

题意:

万圣节来临之际,蒜头君准备在学校策划一次大型的“非常男女”配对活动。对于这次活动的参与者,蒜头君有自己独特的选择方式。他希望能选择男女人数相等且身高都很接近的一些人。这种选择方式实现起来很简单。他让学校的所有人按照身高排成一排,然后从中选出连续的若干个人,使得这些人中男女人数相等。为了使活动更热闹,蒜头君当然希望他能选出的人越多越好。请编写程序告诉他,他最多可以选出多少人来。

思路:

当sum[i]==0时,即男女数相等,只要找到两个位置的前缀和相等,他们之间就是男女相等的连续子序列。我们记录每个前缀和第一次出现的位置,下次出现的时候,减去第一次的位置就是长度。

代码:

#include<iostream>
#include<cstdio>
#include<map>
using namespace std;int main()
{int a[100005],sum[200005];int n,ans=0;cin >> n;for(int i=1; i<=n; i++){cin>>a[i];if(a[i]==0)a[i]=-1;sum[i]=sum[i-1]+a[i];if(sum[i]==0)ans=max(ans,i);}map<int,int>mp; //空的mp容器for(int i=1; i<=n; i++){if(!mp.count(sum[i])) mp[sum[i]]=i;elseans=max(ans,i-mp[sum[i]]);}cout<<ans<<endl;return 0;
}

G - 矩形A + B

题意:

给你一个高为n ,宽为m列的网格,计算出这个网格中有多少个矩形

思路:

分别求长宽的前n项和相乘

代码:

#include<iostream>
using namespace std;
int main()
{int t,n,m;cin>>t;while(t--){cin>>n>>m;long long ans=((1+n)*n/2)*((1+m)*m/2);cout<<ans<<endl;}
}

2021年暑期训练阶段三Day2相关推荐

  1. HRBU 2021年暑期训练阶段三Day1

    目录 A - Similar Strings 题目链接: 题意: 做法: B - card card card 题目链接: 题意: 做法: C - String 题目链接: 题意: 做法: D - C ...

  2. 2021年暑期训练阶段四Day2

    目录 A - Drying B - Garland C - How Many Tables D - Can you solve this equation? E - CD F - Monthly Ex ...

  3. HRBU 2021年暑期训练阶段二Day3

    目录 A - Shuffle'm Up 题目链接: 题意: 做法: B - Prime Path 题目链接: 题意: 做法: C - Function Run Fun 题目链接: 题意: 做法: D ...

  4. 2021年暑期训练阶段四Day1

    目录 A - Hamburgers B - River Hopscotch C - Cup D - Fibonacci E - Dating with girls(1) F - Median G - ...

  5. HRBU 2021暑期训练解题报告阶段三Day2

    目录 A - Jessica's Reading Problem B - Bound Found C - Subsequence D - Tallest Cow E - Straight Master ...

  6. 牛客2021暑期训练1-A-Alice and Bob

    牛客2021暑期训练1-A-Alice and Bob 题目链接 题意 给定两堆石子n,m(1<=n,m<=5e3),Alice先手,对任意一堆取k(k>0)个,另一堆取s*k(s& ...

  7. 2021年人工神经网络第三次作业-第二题:遗传算法与人工神经网络-参考答案

    简 介: 给出了对于BP网络求解异或问题过程中,利用遗传算法完成网络演变的过程.所使用的遗传算法是最基本的遗传算法.利用遗传算法对于网络的系数进行演变,可以对网络系数初始化过程进行优化.对于不同的遗传 ...

  8. Fast-RCNN解析:训练阶段代码导读

    转载自:http://blog.csdn.net/linj_m/article/details/48930179#0-tsina-1-35514-397232819ff9a47a7b7e80a4061 ...

  9. Potato的暑期训练day#1题解 ——毒瘤构造

    Potato的暑期训练day#1 --毒瘤构造 题目链接: A.https://vjudge.net/problem/HDU-1214 B.https://vjudge.net/problem/Cod ...

最新文章

  1. pytorch默认初始化_“最全PyTorch分布式教程”来了!
  2. Kubernetes 选择 IPVS
  3. xxl-job使用实例
  4. 手把手教你完成CSDN对接百度统计 看完这篇文章你还不会对接 欢迎您提刀顺着网线来砍我!!!!
  5. 深入分析MFC文档视图结构(项目实践)
  6. poj 3181 Dollar Dayz (整数划分问题---递归+DP)
  7. LINUX上传下载小工具lrzsz
  8. 大数据工程师简历_大数据毕业生简历该怎么写?
  9. Mstar的Monitor方案OSD 菜单制作(五)——icon绘制
  10. Qt Charts入门
  11. 【JS】1007- JavaScript实现网页截屏的5种方法
  12. Lifeline功能介绍01——日历及时间轴的查看
  13. Thinksystem本地制作BOMC刷新SR650 升级到指定版本微码
  14. 利用DOCX文档远程模板注入执行宏代码
  15. Python_删除TXT文件中不想要的内容
  16. Python3:好玩游戏的物品清单 和 列表到字典的函数
  17. cmd中的循环语句for
  18. vss2005配置方法
  19. SSM+Layui实现上传图片
  20. Dependency check配置Mysql数据库存储nvd数据

热门文章

  1. 博图编写温度程序_西门子PLC博图V15编写程序
  2. 数商云:产业互联网时代下快消品行业供应链管理模式探索
  3. 我在新浪的微博: http://blog.sina.com.cn/wenxy1
  4. markdown语法自定义补全
  5. 图像处理与计算机视觉网址导航
  6. Sweet Snippet 之 PlayMode实现
  7. 【NLP】文本匹配相关方向打卡点总结
  8. 【内核调度、负载计算】【update_curr】
  9. Android之ViewPager实现图片无限循环轮播
  10. 计算机办公高级试题,高级办公软件之Word测试题