2017北京国庆刷题Day1 morning
期望得分:100+100+100=300
实际得分:100+100+70=270
T1位运算1(bit)
Time Limit:1000ms Memory Limit:128MB
题目描述
LYK拥有一个十进制的数N。它赋予了N一个新的意义:将N每一位都拆开来后再加起来就是N所拥有的价值。例如数字123拥有6的价值,数字999拥有27的价值。
假设数字N的价值是K,LYK想找到一个价值是K-1的数字,当然这个答案实在太多了,LYK想使得这个价值为K-1的数字尽可能大。
输入格式(bit.in)
一个数N。
输出格式(bit.out)
一个数表示答案。你需要输出一个非负整数,且这个数不包含前导0。
输入样例1
199
输出样例1
198
输入样例2
1000
输出样例2
0
对于20%的数据n<=10
对于40%的数据n<=100
对于60%的数据n<=1000
对于100%的数据1<=n<=100000。
最后一个非零数-1
#include<cstdio>
using namespace std;
int num[],bit[],ans[];
int main()
{
freopen("bit.in","r",stdin);
freopen("bit.out","w",stdout);
int n,len=;
scanf("%d",&n);
bit[]=; for(int i=;i<;i++) bit[i]=bit[i-]*;
while(n) num[len++]=n%,n/=;
bool ok=false;
for(int i=;i<len;i++)
{
ans[i]=num[i];
if(!ok && ans[i]) ans[i]--,ok=true;
}
int out=;
for(int i=;i<len;i++) out+=ans[i]*bit[i];
printf("%d",out);
return ;
}
T2火柴棒 (stick)
Time Limit:1000ms Memory Limit:128MB
题目描述
众所周知的是,火柴棒可以拼成各种各样的数字。具体可以看下图:
通过2根火柴棒可以拼出数字“1”,通过5根火柴棒可以拼出数字“2”,以此类推。
现在LYK拥有k根火柴棒,它想将这k根火柴棒恰好用完,并且想知道能拼出的最小和最大的数分别是多少。
输入格式(stick.in)
一个数k。
输出格式(stick.out)
两个数,表示最小的数和最大的数。注意这两个数字不能有前导0。
输入样例
15
输出样例
108 7111111
数据范围
对于30%的数据k<=10。
对于60%的数据k<=20。
对于100%的数据1<k<=100。
最大:
k=偶数,k/2个1
k=奇数,1个7和(k-1)/2个1、
最小:
dp[i][j] j根火柴棒拼成的最小的i位数
其实第一维没有用
#include<cstdio>
#include<algorithm>
using namespace std;
int use[]={-,-,,,,,,};
int k;
long long dp[][];
void out(long long x)
{
if(x/) out(x/);
putchar(x%+'');
}
void solve_min()
{
if(k==) { printf(""); return; }
int len=k/+;
for(int i=;i<;i++) dp[][i]=use[i];
dp[][]=;
if(dp[][k]) { out(dp[][k]); return;}
for(int i=;i<=len;i++)
{
for(int j=;j<=k;j++)
for(int l=;l<=;l++)
{
if(j-l<=) continue;
if(!dp[i-][j-l]) continue;
if(!dp[i][j]) dp[i][j]=dp[i-][j-l]*+use[l];
else dp[i][j]=min(dp[i][j],dp[i-][j-l]*+use[l]);
}
if(dp[i][k]) { out(dp[i][k]); return; }
}
}
void solve_max()
{
int len=k/;
if(k&)
{
printf("");
for(int i=;i<len;i++) printf("");
}
else
{
for(int i=;i<=len;i++) printf("");
}
}
int main()
{
freopen("stick.in","r",stdin);
freopen("stick.out","w",stdout);
scanf("%d",&k);
solve_min();
printf(" ");
solve_max();
}
T3听音乐(music)
Time Limit:1000ms Memory Limit:128MB
题目描述
LYK喜欢听音乐,总共有n首音乐,有m个时刻,每个时刻LYK会听其中一首音乐,第i个时刻会听第ai首音乐。它给自己定了一个规定,就是从听音乐开始,听的每连续n首音乐都是互不相同的。例如当n=3时,从听歌开始,123321就是一个合法的顺序(此时LYK听了两轮歌,分别是123和321,每一轮的歌都是互不相同的),而121323就是一个不合法的顺序(LYK也听了两轮歌,第一轮中121存在听了两次相同的歌)。我们现在只截取其中一个片段,也就是说并不知道LYK之前已经听了什么歌。因此121323也仍然可以是一个合法的顺序,因为LYK之前可能听过3,然后再听121323,此时LYK听了三轮歌,分别是312,132和3。
现在LYK将告诉你这m个时刻它听的是哪首歌。你需要求出LYK在听这m首歌之前可能听过的歌的不同方案总数(我们认为方案不同当且仅当之前听过的歌的数量不同)。LYK向你保证它之前听过的歌的数量是在0~n-1之间的。因此你输出的答案也应当是0~n中的某个整数(答案是0表示LYK记错了,没有一个合法的方案)。
输入格式(music.in)
第一行两个数n,m。
第二行m个数表示ai。
输出格式(music.out)
一个数表示答案。
输入样例1
4 10
3 4 4 1 3 2 1 2 3 4
输出样例1
1
样例解释1:LYK之前一定只听过2首歌(12或者21),这样可以分成3部分分别是34,4132,1234,每一部分都没有出现相同的歌。对于其它情况均不满足条件。
输入样例2
6 6
6 5 4 3 2 1
输出样例2
6
样例解释2:LYK之前听过0~5首歌的任意几首都是有可能满足条件的。
数据范围
对于50%的数据n,m<=1000。
对于100%的数据1<=n,m<=100000,1<=ai<=n。
其中均匀分布着n<m以及n>=m的情况。
预处理每个位置往后没有重复能扩展到的最远位置
然后枚举之前听过i首歌
整个序列分为三部分,最前面不完整部分、中间完整几段、最后面不完整部分
枚举每一段的左端点,如果他能向右扩展的部分>=这一段的右端点,说明这是合法的一段,继续下一段
如果每一段都合法,那i就合法
时间复杂度:n/1+n/2+n/3+……≈nlogn
30分丢分原因:判断最前面不完整部分时,枚举了,这样复杂度就多加了n*(n-1)/2
只要判断1是否能扩展到n-i即可
#include<cstdio>
#include<iostream>
#define N 100002
using namespace std;
int n,m;
int a[N],suf[N];
bool vis[N],t=true;
void read(int &x)
{
x=; char c=getchar();
while(!isdigit(c)) c=getchar();
while(isdigit(c)) { x=x*+c-''; c=getchar(); }
}
void pre()
{
int r=m; vis[a[m]]=; suf[m]=m;
for(int i=m-;i;i--)
{
if(!vis[a[i]]) suf[i]=r,vis[a[i]]=true;
else
{
while(r>i)
{
if(a[r]==a[i]) { r--;break; }
vis[a[r--]]=false;
}
suf[i]=r;
}
}
for(int i=;i<=m&&t;i++)
if(suf[i]<m) t=false;
}
bool check(int x)
{
int first=;
if(x)
{
first=n-x;
if(suf[]<first) return false;
}
int r=first;
for(int i=first+;i<=m;i+=n)
{
r=min(m,r+n);
if(suf[i]<r) return false;
}
return true;
}
int main()
{
freopen("music.in","r",stdin);
freopen("music.out","w",stdout);
read(n); read(m);
for(int i=;i<=m;i++) read(a[i]);
pre();
int ans=;
for(int i=;i<n;i++)
if(n-i>m) ans+=t;
else ans+=check(i);
printf("%d",ans);
}
2017北京国庆刷题Day1 morning的更多相关文章
- 2017北京国庆刷题Day1 afternoon
期望得分:100+100+100=300 实际得分:100+100+100=300 T1 一道图论好题(graph) Time Limit:1000ms Memory Limit:128MB 题目 ...
- 2017北京国庆刷题Day1 morning T2
T2火柴棒 (stick) Time Limit:1000ms Memory Limit:128MB 题目描述 众所周知的是,火柴棒可以拼成各种各样的数字.具体可以看下图: 通过2根火柴棒可以拼出 ...
- 2017北京国庆刷题Day7 morning
期望得分:100+0+100=200 实际得分:100+20+0=120 离散化搞搞 #include<cstdio> #include<iostream> #include& ...
- 2017北京国庆刷题Day5 afternoon
期望得分:100+60+100=260 实际得分:0+60+40=100 设图中有m个环,每个环有si条边,有k条边不在环中 ans= (2^s1 -2)*( 2^s2 -2)* (2^s3 -2)… ...
- 2017北京国庆刷题Day3 morning
期望得分:100+60+0=160 实际得分:100+30+0=130 考场上用的哈希 #include<cstdio> #include<cstring> #include& ...
- 2017北京国庆刷题Day2 afternoon
期望得分:100+100+50=250 实际得分:100+70+50=220 T1 最大值(max) Time Limit:1000ms Memory Limit:128MB 题目描述 LYK有一 ...
- 2017北京国庆刷题Day2 morning
期望得分:100+100+40=240 实际得分:100+40+0=140 T1 一道图论神题(god) Time Limit:1000ms Memory Limit:128MB 题目描述 LYK ...
- 2017北京国庆刷题Day4 morning
期望得分:0+40+30=70 实际得分:0+10+10=20 题目修改:只能由0变1,只能用一次操作 大模拟 #include<cstdio> #include<cstring&g ...
- 2017北京国庆刷题Day5 morning
期望得分:0+60+60=120 实际得分:0+30+60=90 令g=gcd(X11,X12,X13……) 则行列式可能为D的充要条件为g|D 1.g|D为必要条件: 由定义来算行列式的时候,每一项 ...
随机推荐
- Scrum立会报告+燃尽图(十一月十六日总第二十四次):功能开发与设计页面
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2384 项目地址:https://git.coding.net/zhang ...
- css全局样式基础代码
body{ font-size:12px; font-family:"宋体",Arial, Helvetica, sans-serif;color:#363636;backgrou ...
- lintcode-402-连续子数组求和
[402-连续子数组求和(http://www.lintcode.com/zh-cn/problem/continuous-subarray-sum/) 给定一个整数数组,请找出一个连续子数组,使得该 ...
- J2EE体系
J2EE的概念 目前,Java 2平台有3个版本,它们是适用于小型设备和智能卡的Java 2平台Micro版(Java 2 Platform Micro Edition,J2ME).适用于桌面系统的J ...
- 复利计算器Junit单元测试
一.测试场景 测试模块 测试输入 预期结果 运行结果 bug跟踪 复利计算 (本金,利率,年限,次数) 终值 测试运算结果 (100,5,3,1) 115.76 115.76 测试输入负数 ...
- Fn+F1-F12,避免使用FN+
用惯了win8.1,再用win10 很不习惯使用FN+F1-F12 如果要避免使用FN+:使用[FN+ESC]
- laya3d 文件格式
先认识下laya3d的一些文件 导出文件说明: ls --- 场景文件: Json文件,包含场景中所有节点的数据信息,包含光照贴图信息 ...
- PHP中类型约束
类型约束 什么叫类型约束? 就是要求某个变量只能使用(接收,存储)某种指定的数据类型: php属于“弱类型语言”,通常不支持类型约束: 相应的,强类型语言,类型约束却是其“基本特征”. php中,只支 ...
- Maven 私服安装和启动
在安装私服的时候容易碰到的两个问题,一个是安装时拒绝访问,另一个是安装完成后服务无法启动: 拒绝访问问题: 原因:没有以管理员身份运行 cmd 解决办法: 如果是 win7 的话,可以直接在 [运行- ...
- HDU4753 Fishhead’s Little Game——2013 ACM/ICPC Asia Regional Nanjing Online
今天比赛又是做得好水的.被狂虐啊. 比赛两个多小时一直没出题,遒遒最先交的若干发都wa了.T_T 我独自在一遍苦思了1006这个题,还好最后把这个题目A掉了,不然又是深坑队友. 题目的意思我就不多说了 ...