T1 删除

题目

【题目描述】

现在,我的手上有 n 个数字,分别是 a1,a2,a3,...,an。 我现在需要删除其中的 k 个数字。当然我不希望随随便便删除,我希望删除 k 数字之后,剩下的 n−k 个数中有最多的不同的数。

【输入格式】

第一行两个正整数 n 和 k,含义如题目描述。 接下来一行,有 n 个非负整数,分别是 a1 到 an。

【输出格式】

一共一行,一个整数ans,表示删除了 k 个数字后最多的不同的数的个数。

【输入样例】

41

1312

【输出样例】

3

【数据规模】

对于 30% 的数据,n≤10,ai ≤10。

对于 60% 的数据,n≤100,ai ≤100。

对于 80% 的数据,n≤10^5,ai ≤10^5。

对于 100% 的数据,n≤10^5,ai ≤10^9。

解析

先排序,后去重,

然后,然后就没有然后了。

Code

  1. #include<cmath>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<iostream>
  5. #include<algorithm>
  6. using namespace std;
  7. const int MAXN = ;
  8. int n, m, k, i, j, a[MAXN];
  9. inline int get()
  10. {
  11. char c;
  12. while (((c = getchar()) < || c > ) && c != '-');
  13. if (c == '-')
  14. {
  15. int res = ;
  16. while ((c = getchar()) >= && c <= )
  17. res = res * + c - '';
  18. return -res;
  19. }
  20. else{
  21. int res = c - '';
  22. while ((c = getchar()) >= && c <= )
  23. res = res * + c - '';
  24. return res;
  25. }
  26. }
  27. int main()
  28. {
  29. //freopen("del.in", "r", stdin);
  30. //freopen("del.out", "w", stdout);
  31. cin >> n >> k;
  32. for(i = ; i <= n; i ++)
  33. a[i] = get();
  34. sort(a + , a + + n);
  35. m = unique(a + , a + + n) - - a;
  36. k -= (n - m);
  37. if (k <= ) cout << m;
  38. else cout << m - k;
  39. //fclose(stdin);
  40. //fclose(stdout);
  41. }

T2 蚂蚁移动

题目

【题目描述】

有一根尺子,长度L,在上面有N只蚂蚁,且没有两只蚂蚁初始位置相同。每只蚂蚁有一个初始方向(左或者右),且它们会爬行,速度都是每秒一个长度单位。

当它们碰到另外一个蚂蚁或者尺子的边缘时,它们会立即改变移动的方向(即反向)。

给定尺子的长度,蚂蚁的只数,以及所有蚂蚁初始的位置和方向。要你求第T秒时每只蚂蚁的位置。

【输入格式】

第一行两个整数L和T。

第二行一个整数N,表示蚂蚁的只数。

接下来的每行由两部分组成。第一部分是一个整数,表示该蚂蚁的初始位置。第二部分是一个字母,表示初始方向:D表示向右,L表示向左。两部分中间空格。

【输出格式】

N个整数,表示每只蚂蚁的最终位置。无需按照蚂蚁的原先编号输出,只要按照最终位置坐标递增(非降)的顺序输出坐标即可。

【输入样例】

3 5

1

1 D

【输出样例】

0

【数据规模】

L<=200000,N<=70000,N<L,1<=T<=1000000。

解析

非常有趣的题目,当两只蚂蚁相遇时,都会调头,实际上,由于答案无需按照原先编号输出,我们可以直接不处理相遇的情况,

即都调头实际上是没有任何变化的,然后在0点和L点掉头即可。

Code

  1. #include <algorithm>
  2. #include <iostream>
  3. #include <cstring>
  4. #include <string>
  5. #include <cstdio>
  6. #include <cmath>
  7. using namespace std;
  8. int read()
  9. {
  10. int num=,w=;
  11. char ch=getchar();
  12. while(ch<''||ch>'')
  13. {
  14. if(ch=='-') w=-;
  15. ch=getchar();
  16. }
  17. while(ch>=''&&ch<='')
  18. {
  19. num=(num<<)+(num<<)+ch-'';
  20. ch=getchar();
  21. }
  22. return num*w;
  23. }
  24. int l,t,n,a,b[],c;
  25. char s;
  26. int main()
  27. {
  28. //freopen("mravi.in","r",stdin);
  29. //freopen("mravi.out","w",stdout);
  30. l=read(),t=read(),n=read();
  31. for(int i=;i<=n;i++)
  32. {
  33. c=;
  34. a=read(),s=getchar();
  35. while(c!=t)
  36. {
  37. c++;
  38. if(s=='D')
  39. {
  40. if(a==l)
  41. {
  42. s='L';
  43. a--;
  44. }
  45. else a++;
  46. }
  47. else
  48. {
  49. if(a==)
  50. {
  51. s='D';
  52. a++;
  53. }
  54. else a--;
  55. }
  56. }
  57. b[i]=a;
  58. }
  59. sort(b+,b+n+);
  60. for(int i=;i<=n;i++) cout<<b[i]<<" ";
  61. return ;
  62. //fclose(stdin);
  63. //fclose(stdout);
  64. }

T3 权值

题目

【题目描述】

有一个长度为n的实数序列,,下标从1开始,其中第k个位置的实数为p · (sin(a · k + b) + cos(c · k + d) + 2),

sin和cos采用弧度制,其中p,a,b,c,d均为给定的整数。你需要从这个序列中选择两个位置(可以相同),使前边的位置上的数字减去后边的位置上的数字最大。

如果选择了两个相同的位置,那么差为0.

【输入格式】

一行六个整数p,a,b,c,d,n。

【输出格式】

一行一个实数表示最大的差值,保留六位小数。

【输入样例】

100 432 406 867 60 1000

【输出样例】

399.303813

【数据规模】

对于30%的数据,1<=p,a,b,c,d<=1000,1<=n<=1000;

对于全部的数据,1<=p,a,b,c,d<=1000,1<=n<=10^6。

解析

sin和cos是什么?三角函数?这是个啥?不知道,不过不要紧,直接调用<cmath>库里的sin()和cos()就可以了。

最大的差值如何处理呢?我们先前缀一遍最大值,再后缀一遍最小值,最后两个相减取最大值即可。

Code

  1. #include <algorithm>
  2. #include <iostream>
  3. #include <cstring>
  4. #include <string>
  5. #include <cstdio>
  6. #include <cmath>
  7. using namespace std;
  8. int read()
  9. {
  10. int num=,w=;
  11. char ch=getchar();
  12. while(ch<''||ch>'')
  13. {
  14. if(ch=='-') w=-;
  15. ch=getchar();
  16. }
  17. while(ch>=''&&ch<='')
  18. {
  19. num=(num<<)+(num<<)+ch-'';
  20. ch=getchar();
  21. }
  22. return num*w;
  23. }
  24. int p,a,b,c,d,n;
  25. double maxn,ans[],ans1[],ans2[];
  26. int main()
  27. {
  28. //freopen("weight.in","r",stdin);
  29. //freopen("weight.out","w",stdout);
  30. p=read(),a=read(),b=read(),c=read(),d=read(),n=read();
  31. for(int i=;i<=n;i++)
  32. {
  33. ans[i]=(double)(p*(sin(a*i+b)+cos(c*i+d)+));
  34. ans1[i]=max(ans1[i-],ans[i]);
  35. }
  36. ans2[n+]=0x7f7f7f7f;
  37. for(int i=n;i>=;i--) ans2[i]=min(ans2[i+],ans[i]);
  38. for(int i=;i<=n;i++) maxn=max(maxn,ans1[i]-ans2[i]);
  39. printf("%.6f",maxn);
  40. return ;
  41. //fclose(stdin);
  42. //fclose(stdout);
  43. }

T4 dvd的逆序对

题目

【题目描述】

给你n,k求1~n有多少排列有恰好k个逆序对。逆序对:对于i,j,满足i<j,且p[i]>p[j]的点对数

【输入格式】

一行两个整数n,k

【输出格式】

输出一个整数,表示答案对1000000007取模后的结果

【输入样例】

4 1

【输出样例】

3

【数据规模】

对于10%的数据  n<=10

对于30%的数据  k<=50

对于100%的数据 1<=n,k<=1000 且 k<=n*(n-1)/2

解析

很显然这是一道DP题,我们令f[i][j]表示前i个数,逆序对数为j的方案总数。

边界为f[i][0]=1,状态转移方程:f[i][j]=f[i][j-1]+f[i-1][j]-f[i-1][j-i](j>=i)(如果j<i则不用减)

具体原因举个例子试试就知道了。

Code

  1. #include <algorithm>
  2. #include <iostream>
  3. #include <cstring>
  4. #include <string>
  5. #include <cstdio>
  6. #include <cmath>
  7. using namespace std;
  8. int read()
  9. {
  10. int num=,w=;
  11. char ch=getchar();
  12. while(ch<''||ch>'')
  13. {
  14. if(ch=='-') w=-;
  15. ch=getchar();
  16. }
  17. while(ch>=''&&ch<='')
  18. {
  19. num=(num<<)+(num<<)+ch-'';
  20. ch=getchar();
  21. }
  22. return num*w;
  23. }
  24. const int mod=;
  25. int n,k;
  26. long long f[][];//f[i][j]表示前i个数逆序对数为j的方案数
  27. int main()
  28. {
  29. //freopen("sequence.in","r",stdin);
  30. //freopen("sequence.out","w",stdout);
  31. n=read(),k=read();
  32. for(int i=;i<=n;i++) f[i][]=;
  33. for(int i=;i<=n;i++)
  34. for(int j=;j<=k;j++)
  35. f[i][j]=((f[i][j-]+f[i-][j])%mod-f[i-][max(j-i,-)]+mod)%mod;//f[i-1][-1]=0
  36. cout<<f[n][k];
  37. return ;
  38. //fclose(stdin);
  39. //fclose(stdout);
  40. }

长乐培训Day7的更多相关文章

  1. 常州培训 day7 解题报告

    最后一天..有些感慨,这七天被虐的感动万分 第一题: 题目大意: 求出 n*i(i=1,2,3....n) mod p的逆元  n<p<=3000000 ,p是质数. 之前写过了,懒得再写 ...

  2. 纪中2018暑假培训day7提高b组改题记录

    由于今天太颓了,所以没有解释 t1: Description 码零鼠是一只很喜欢mx数学的神犇,上面那个不是ta本人的样子.这天,ta在研究一个神奇的数列,这个数列是这样的:a0 = 1an = ai ...

  3. 长乐培训Day4

    T1 矩阵 题目 [题目描述] 从前有个 n×m 的矩阵,初始时每个位置均为 0.你需要依次执行 q 个操作,每个操作会指定一行或一列,然后将该行或该列的所有元素全部赋为一个相同的值. 输出操作完成后 ...

  4. 长乐培训Day9

    T1 立方数 题目 [题目描述] 作为XX战队的狂热粉丝,MdZzZZ看到了自己心仪的队伍在半决赛落败,顿时心灰意冷.看着自己手中的从黄牛那里抢来的天价总决赛门票,MdZzZZ觉得去鸟巢已经没有意义了 ...

  5. 长乐培训Day8

    T1 远征 题目 [题目描述] 寒枫将军将要带领他的部队去圣雪山消灭那里的冰龙.部队分成了若干个小队,属于同一个小队的人兵种相同. 寒枫将军有着杰出的指挥能力,在战斗的时候,寒枫将军能够让所有相同兵种 ...

  6. 长乐培训Day6

    T1 数列 题目 [题目描述] [输入格式] [输出格式] [输入样例] [输出样例] [数据规模] 如上所述. 解析 身为T1,居然比T4还难......让我怎么办......以下为巨佬题解: 我猜 ...

  7. 长乐培训Day5

    T1 圆圈舞蹈 题目 [题目描述] 熊大妈的奶牛在时针的带领下,围成了一个圈跳舞.由于没有严格的教育,奶牛们之间的间隔不一致. 奶牛想知道两只最远的奶牛到底隔了多远.奶牛A到B的距离为A顺时针走和逆时 ...

  8. 长乐培训Day3

    T1 奶牛晒衣服 题目 [题目描述] 在熊大妈英明的带领下,时针和他的同伴生下了许多牛宝宝.熊大妈决定给每个宝宝都穿上可爱的婴儿装.于是,为牛宝宝洗晒衣服就成了很不爽的事情. 圣人王担负起了这个重任. ...

  9. 长乐培训Day2

    T1 足球联赛 题目 [题目描述] 巴蜀中学新一季的足球联赛开幕了.足球联赛有n只球队参赛,每赛季,每只球队要与其他球队各赛两场,主客各一场,赢一场得3分,输一场不得分,平局两只队伍各得一分. 英勇无 ...

随机推荐

  1. project.config.json在设置了编译模式的时候会出现配置,怎么解决

    因为之前为了方便就选了一个页面进行编译,但是想想回到index首页,就编译了一个pages/index/index. 出现了上面这个,当我再选择编译的时候,还是不会变成之前的. 解决方法是 把红框那段 ...

  2. 设置windows service方式启动GitBlit

    1.在Gitblit目录下,找到installService.cmd文件. 2.用记事本或者notepad++打开 2.1修改 ARCH 32位系统:SET ARCH=x86 64位系统:SET AR ...

  3. 微信JS-SDK分享功能的.Net实现代码

    JS-SDK接口是什么? 为了方便开发者实现微信内的网页(基于微信浏览器访问的网页)功能,比如拍照.选图.语音.位置等手机系统的能力,并方便开发者直接使用微信分享.扫一扫等微信特有的能力,微信推出了J ...

  4. vue入门|ElementUI使用指南

    vue入门|ElementUI使用指南 1.开发前务必熟悉的文档: vue.js2.0中文,项目所使用的js框架 vue-router,vue.js配套路由 vuex 状态管理 Element UI框 ...

  5. JavaWeb三大组件(Servlet、Filter、Listener)

    JavaWeb三大组件指的是:Servlet.Filter.Listener,这三个组件在JavaWeb开发中分别提供不同的功能,然而很多人可能只用过其中一个或者两个(Servlet.Filter,比 ...

  6. The Art of Picking Intel Registers Intel寄存器的艺术

    https://www.swansontec.com/sregisters.html I wrote this article for an online magazine called Scene ...

  7. Python的开源人脸识别库:离线识别率高达99.38%(附源码)

    Python的开源人脸识别库:离线识别率高达99.38%(附源码) 转https://cloud.tencent.com/developer/article/1359073   11.11 智慧上云 ...

  8. [原][landcover]全球地表植被样例图片

    图由南水之源提供,感谢    流socket  制作总结 原截图如下:按字母顺序排序 asphalt asphalt_bright asphalt_white brightRockOnly broad ...

  9. 单例模式以及Python实现

    单例模式以及Python实现 单例模式 单例模式就是确保一个类只有一个实例.当你希望整个系统中,某个类只有一个实例时,单例模式就派上了用场.比如,某个服务器的配置信息存在在一个文件中,客户端通过App ...

  10. RestSharp - Ignore SSL errors

    项目启动时,添加下面代码: 项目启动时,添加 public App() { ServicePointManager.ServerCertificateValidationCallback += (se ...