A. Three swimmers

题意:第一个人跳水是每隔a分钟去一次,第二个人跳水是每隔b分钟,第三个人跳水是每隔c分钟,一个人准备在p分钟的 时候去跳水,问需要最少等待多长时间才能轮到前三个人

思路:数学公式进行找,从头到尾挨个人找就行不用混着,混着也没有办法下手

当时:1)当时想着从头开始然后一直用while循环,根本想不到用数学公式,也没有想到是分开来计算的

代码:

 1 #include<iostream>
2 #include<algorithm>
3 #include<cstdio>
4 #include<cmath>
5 #include<cstring>
6 using namespace std;
7 int main(){
8 int t;
9 scanf("%d",&t);
10 while(t--){
11 long long int p,a,b,c;
12 long long int cc=1e18;
13 scanf("%lld %lld %lld %lld",&p,&a,&b,&c);
14 long long int aa=a,bb=b,pp=p,t=c;
15 long long int a1,b1,c1;
16 if(p%a!=0){
17 a1=((p/a)+1)*a-p;
18 }else{
19 a1=0;
20 }
21 if(p%b!=0){
22 b1=((p/b)+1)*b-p;
23 }else{
24 b1=0;
25 }
26 if(p%c!=0){
27 c1=((p/c)+1)*c-p;
28 }else{
29 c1=0;
30 }
31 cc=min(cc,a1);
32 cc=min(cc,b1);
33 cc=min(cc,c1);
34
35 printf("%lld\n",cc);
36 }
37 }

B. Card Deck

题意:就是给定一组数列,然后这是一摞牌从最底下往上的顺序,然后进行选牌,让最大在下面,保证数值最大

思路:就是直接从后往前把最大的选出来就行了,其实也是暴力循环找,从后往前,因为数字是从1-n标记的,第一个就是找n,把n和它之后的数组进行输出并标记一下,然后再通过标记找下一个最大值

代码:

 1 #include<iostream>
2 #include<algorithm>
3 #include<cstdio>
4 #include<cmath>
5 #include<cstring>
6 using namespace std;
7 const int maxx=1e5+10;
8 int main(){
9 int t;
10 scanf("%d",&t);
11 while(t--){
12 int n;
13 int a[maxx],b[maxx]={0};
14 scanf("%d",&n);
15 for(int i=0;i<n;i++){
16 scanf("%d",&a[i]);
17 }
18 int t=n,now=n-1;
19 for(int i=n-1;i>=0;i--){
20 if(a[i]==t){
21 for(int j=i;j<=now;j++){
22 printf("%d ",a[j]);
23 b[a[j]]=1;
24 }
25 now=i-1;
26 for(int j=t;j>0;j--){
27 if(b[j]==0){
28 t=j;
29 break;
30 }
31 }
32 }
33 }
34 printf("\n");
35 }
36 }

C. Maximum width

题意:两个数组,第二个数组包含在第一个里面,问其宽度最大是多少

思路:最大肯定是前面的在最左边,后面的在最右边,然后开两个数组,一个记录第二个数组,每一个字符在第一个字符串中最左边的位置,一个记录在最右边的位置,然后通过记录找到最大最小的差值是多少

记:1)思考极端情况,分出最左最右;2)分别进行计算,尤其是很多形式一样的思路和公式之类的东西;3)找对应位置最左最右的时候,应该学习一下这中想法,最开始把它想象成一对一的那种,所以如果是一对一就应该每次减一,然后在这个基础上进行加加减减的变化找到对应位置

代码:

 1 #include<iostream>
2 #include<algorithm>
3 #include<cstdio>
4 #include<cmath>
5 #include<cstring>
6 using namespace std;
7 const int maxx=2e5+10;
8 int main(){
9 int n,m;
10 scanf("%d %d",&n,&m);
11 char a[maxx],b[maxx];
12 getchar();
13 for(int i=1;i<=n;i++){
14 scanf("%c",&a[i]);
15 }
16 getchar();
17 for(int i=1;i<=m;i++){
18 scanf("%c",&b[i]);
19 }
20 int l[maxx],r[maxx];
21 r[m+1]=n+1;
22 for(int i=m;i>0;i--){
23 r[i]=r[i+1]-1;
24 while(a[r[i]]!=b[i]){
25 r[i]--;
26 }
27 }
28 /* printf("%s\n",a);
29 printf("%s\n",b);*/
30 l[0]=0;
31 for(int i=1;i<=m;i++){
32 l[i]=l[i-1]+1;
33 while(a[l[i]]!=b[i]){
34 l[i]++;
35 }
36 }
37 /* for(int i=0;i<=m+1;i++){
38 printf("%d ",l[i]);
39 }
40 printf("\n");
41 for(int i=0;i<=m+1;i++){
42 printf("%d ",r[i]);
43 }
44 printf("\n");*/
45 int maxn=0;
46 for(int i=1;i<m;i++){
47 maxn=max(r[i+1]-l[i],maxn);
48 }
49 printf("%d\n",maxn);
50 }

这一套题:要想着很多东西不要混着,混着算可能很麻烦,要分开考虑和计算

最新文章

  1. Factorization Machine因子分解机
  2. C学习笔记
  3. ios-自定义alertView提示框
  4. c++ Windows Socket实现最简单的C/S网络通信(TCP)
  5. MFC VC6++学习笔记
  6. ruby中Block, Proc 和 Lambda 浅析
  7. Android Studio 环境配置优化
  8. altKey,ctrlKey,shiftKey
  9. 在node.js中如何屏蔽掉favicon.ico的请求
  10. Sticks Problem
  11. 腾讯面试:一条SQL语句执行得很慢的原因有哪些?---不看后悔系列
  12. IDisposable
  13. LightOJ - 1074 Extended Traffic(标记负环)
  14. js当中null和{}区别
  15. Java网络编程技术2
  16. 【转】字符串匹配的KMP算法:移动位数 = 已匹配 - 部分匹配值(共有长度)
  17. &lt;pre&gt;标签让&lt;textarea&gt;标签的内容原样输出
  18. poj 1028 Web Navigation
  19. avalon实现分页组件
  20. 《Google软件测试之道》之学习笔记01

热门文章

  1. 文本编辑工具 Vim与压缩打包
  2. Android 之 SimpleAdapter 学习笔记
  3. Docker备份Gitlab容器以及还原数据
  4. Hadoop学习笔记—HDFS
  5. TypeError: Can&#39;t convert &#39;int&#39; object to str implicitly Python常见错误
  6. 数栈SQL优化案例:隐式转换
  7. Linux就该这么学:重定向,管道符,通配符,转义符,环境变量
  8. 动态的创建Class对象方法及调用方式性能分析
  9. JMeter5.4.1源码IDEA构建&amp;二次开发(实战)
  10. 【CTF】CTFHub 技能树 彩蛋 writeup