长乐培训Day7
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
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int MAXN = ;
int n, m, k, i, j, a[MAXN];
inline int get()
{
char c;
while (((c = getchar()) < || c > ) && c != '-');
if (c == '-')
{
int res = ;
while ((c = getchar()) >= && c <= )
res = res * + c - '';
return -res;
}
else{
int res = c - '';
while ((c = getchar()) >= && c <= )
res = res * + c - '';
return res;
}
}
int main()
{
//freopen("del.in", "r", stdin);
//freopen("del.out", "w", stdout);
cin >> n >> k;
for(i = ; i <= n; i ++)
a[i] = get();
sort(a + , a + + n);
m = unique(a + , a + + n) - - a;
k -= (n - m);
if (k <= ) cout << m;
else cout << m - k;
//fclose(stdin);
//fclose(stdout);
}
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
#include <algorithm>
#include <iostream>
#include <cstring>
#include <string>
#include <cstdio>
#include <cmath>
using namespace std;
int read()
{
int num=,w=;
char ch=getchar();
while(ch<''||ch>'')
{
if(ch=='-') w=-;
ch=getchar();
}
while(ch>=''&&ch<='')
{
num=(num<<)+(num<<)+ch-'';
ch=getchar();
}
return num*w;
}
int l,t,n,a,b[],c;
char s;
int main()
{
//freopen("mravi.in","r",stdin);
//freopen("mravi.out","w",stdout);
l=read(),t=read(),n=read();
for(int i=;i<=n;i++)
{
c=;
a=read(),s=getchar();
while(c!=t)
{
c++;
if(s=='D')
{
if(a==l)
{
s='L';
a--;
}
else a++;
}
else
{
if(a==)
{
s='D';
a++;
}
else a--;
}
}
b[i]=a;
}
sort(b+,b+n+);
for(int i=;i<=n;i++) cout<<b[i]<<" ";
return ;
//fclose(stdin);
//fclose(stdout);
}
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
#include <algorithm>
#include <iostream>
#include <cstring>
#include <string>
#include <cstdio>
#include <cmath>
using namespace std;
int read()
{
int num=,w=;
char ch=getchar();
while(ch<''||ch>'')
{
if(ch=='-') w=-;
ch=getchar();
}
while(ch>=''&&ch<='')
{
num=(num<<)+(num<<)+ch-'';
ch=getchar();
}
return num*w;
}
int p,a,b,c,d,n;
double maxn,ans[],ans1[],ans2[];
int main()
{
//freopen("weight.in","r",stdin);
//freopen("weight.out","w",stdout);
p=read(),a=read(),b=read(),c=read(),d=read(),n=read();
for(int i=;i<=n;i++)
{
ans[i]=(double)(p*(sin(a*i+b)+cos(c*i+d)+));
ans1[i]=max(ans1[i-],ans[i]);
}
ans2[n+]=0x7f7f7f7f;
for(int i=n;i>=;i--) ans2[i]=min(ans2[i+],ans[i]);
for(int i=;i<=n;i++) maxn=max(maxn,ans1[i]-ans2[i]);
printf("%.6f",maxn);
return ;
//fclose(stdin);
//fclose(stdout);
}
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
#include <algorithm>
#include <iostream>
#include <cstring>
#include <string>
#include <cstdio>
#include <cmath>
using namespace std;
int read()
{
int num=,w=;
char ch=getchar();
while(ch<''||ch>'')
{
if(ch=='-') w=-;
ch=getchar();
}
while(ch>=''&&ch<='')
{
num=(num<<)+(num<<)+ch-'';
ch=getchar();
}
return num*w;
}
const int mod=;
int n,k;
long long f[][];//f[i][j]表示前i个数逆序对数为j的方案数
int main()
{
//freopen("sequence.in","r",stdin);
//freopen("sequence.out","w",stdout);
n=read(),k=read();
for(int i=;i<=n;i++) f[i][]=;
for(int i=;i<=n;i++)
for(int j=;j<=k;j++)
f[i][j]=((f[i][j-]+f[i-][j])%mod-f[i-][max(j-i,-)]+mod)%mod;//f[i-1][-1]=0
cout<<f[n][k];
return ;
//fclose(stdin);
//fclose(stdout);
}
长乐培训Day7的更多相关文章
- 常州培训 day7 解题报告
最后一天..有些感慨,这七天被虐的感动万分 第一题: 题目大意: 求出 n*i(i=1,2,3....n) mod p的逆元 n<p<=3000000 ,p是质数. 之前写过了,懒得再写 ...
- 纪中2018暑假培训day7提高b组改题记录
由于今天太颓了,所以没有解释 t1: Description 码零鼠是一只很喜欢mx数学的神犇,上面那个不是ta本人的样子.这天,ta在研究一个神奇的数列,这个数列是这样的:a0 = 1an = ai ...
- 长乐培训Day4
T1 矩阵 题目 [题目描述] 从前有个 n×m 的矩阵,初始时每个位置均为 0.你需要依次执行 q 个操作,每个操作会指定一行或一列,然后将该行或该列的所有元素全部赋为一个相同的值. 输出操作完成后 ...
- 长乐培训Day9
T1 立方数 题目 [题目描述] 作为XX战队的狂热粉丝,MdZzZZ看到了自己心仪的队伍在半决赛落败,顿时心灰意冷.看着自己手中的从黄牛那里抢来的天价总决赛门票,MdZzZZ觉得去鸟巢已经没有意义了 ...
- 长乐培训Day8
T1 远征 题目 [题目描述] 寒枫将军将要带领他的部队去圣雪山消灭那里的冰龙.部队分成了若干个小队,属于同一个小队的人兵种相同. 寒枫将军有着杰出的指挥能力,在战斗的时候,寒枫将军能够让所有相同兵种 ...
- 长乐培训Day6
T1 数列 题目 [题目描述] [输入格式] [输出格式] [输入样例] [输出样例] [数据规模] 如上所述. 解析 身为T1,居然比T4还难......让我怎么办......以下为巨佬题解: 我猜 ...
- 长乐培训Day5
T1 圆圈舞蹈 题目 [题目描述] 熊大妈的奶牛在时针的带领下,围成了一个圈跳舞.由于没有严格的教育,奶牛们之间的间隔不一致. 奶牛想知道两只最远的奶牛到底隔了多远.奶牛A到B的距离为A顺时针走和逆时 ...
- 长乐培训Day3
T1 奶牛晒衣服 题目 [题目描述] 在熊大妈英明的带领下,时针和他的同伴生下了许多牛宝宝.熊大妈决定给每个宝宝都穿上可爱的婴儿装.于是,为牛宝宝洗晒衣服就成了很不爽的事情. 圣人王担负起了这个重任. ...
- 长乐培训Day2
T1 足球联赛 题目 [题目描述] 巴蜀中学新一季的足球联赛开幕了.足球联赛有n只球队参赛,每赛季,每只球队要与其他球队各赛两场,主客各一场,赢一场得3分,输一场不得分,平局两只队伍各得一分. 英勇无 ...
随机推荐
- redis渐进式 rehash
转载(http://redisbook.com/preview/dict/incremental_rehashing.html) 上一节说过, 扩展或收缩哈希表需要将 ht[0] 里面的所有键值对 r ...
- html5中section元素详解
html5中section元素详解 一.总结 一句话总结: section元素 用来定义文章中的章节(通常应该有标题和段落内容) section元素的作用就是给内容分段,给页面分区 1.section ...
- iTunes Connect上传APP屏幕快照图片失败 - 您必须上传有效的屏幕快照。
您必须上传有效的屏幕快照. 原因很简单:这个屏幕快照 要用 iPhone截屏才可以,你自已随便在电脑上截个图肯定不行 //--------------------------------------- ...
- Flink 之 Data Sink
首先 Sink 的中文释义为: 下沉; 下陷; 沉没; 使下沉; 使沉没; 倒下; 坐下; 所以,对应 Data sink 意思有点把数据存储下来(落库)的意思: Source 数据源 ---- ...
- 多层If语句 和 表格驱动 的对比
网文提到表格驱动,总喜欢拿一层if做例子,然而这样未免也太简单. 下文是三层缩进的if和表驱动比较,大家可自行判断优劣. 业务是这样的,某景点分旺季票价和淡季票价,淡季票为旺季的一半,15岁以下孩子再 ...
- 使用Eclipse创建Web项目时WEB-INF下找不到web.xml问题详解
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/yjrguxing/article/deta ...
- springboot配置Filter的两种方法
一.使用注解1. 假设Filter类的路径为com.sanro.filter @Slf4j @WebFilter(filterName = "authFilter", urlPat ...
- MySQL 权限管理 用户管理
我使用的是 MariaDB 数据库 查看 MySQL 所有用户: select distinct concat('User: \'',user, '\'@\'', host, '\'') as que ...
- VS2019及其他多个版本序列号和安装包
Visual Studio2019序列号Visual Studio 2019 EnterpriseBF8Y8-GN2QH-T84XB-QVY3B-RC4DFVisual Studio 2019 Pro ...
- DataSource接口 Connection pooling(连接池
一.DataSource接口是一个更好的连接数据源的方法: JDBC1.0是原来是用DriverManager类来产生一个对数据源的连接.JDBC2.0用一种替代的方法,使用DataSource的实 ...