位运算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。

#include<iostream>
#include<cstdio>
using namespace std;
#define maxn 10
int n,bit[maxn],len;
int main(){
freopen("bit.in","r",stdin);freopen("bit.out","w",stdout);
scanf("%d",&n);
while(n){
bit[++len]=n%;
n/=;
}
int now=;
while(bit[now]==)now++;
bit[now]--;
while(bit[len]==&&len>=)len--;
if(len==)printf("");
else
for(int j=len;j>=;j--)printf("%d",bit[j]);
fclose(stdin);fclose(stdout);
return ;
}

100分

火柴棒

(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。

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int now,anslen=0x7fffffff,ans[],sum[];
bool anspre;
struct node{
int num,cost,cnt;
}q[];
void dfs(int len,int res){
if(len>anslen)return;
if(res==){
bool flag=;
if(anslen>len)flag=;
if(q[].cnt==len)return;
anslen=len;
int lennow=,ansnow[];
for(int i=;i<=;i++)sum[i]=q[i].cnt;
//for(int i=1;i<=7;i++)cout<<sum[i]<<" ";
for(int i=;i<=;i++){
if(sum[i]){
lennow=lennow+;
ansnow[lennow]=q[i].num,sum[i]--;
break;
}
}
for(int i=;i<=;i++)
while(sum[i]){
lennow=lennow+;
ansnow[lennow]=q[i].num,sum[i]--;
}
for(int i=;i<=lennow;i++){
if(ans[i]>ansnow[i]){
flag=;break;
}
}
if(!anspre)flag=;
//cout<<anslen<<' ';cout<<endl;
if(flag==){
for(int i=;i<=anslen;i++)ans[i]=ansnow[i];
anspre=;
}
//for(int i=1;i<=anslen;i++)cout<<ansnow[i];cout<<endl;
return;
}
for(int i=;i<=;i++){
if(res-q[i].cost>=){
q[i].cnt++;
dfs(len+,res-q[i].cost);
q[i].cnt--;
}
}
}
bool cmp(node x,node y){
return x.num<y.num;
}
int main(){
//freopen("Cola.txt","r",stdin);
freopen("stick.in","r",stdin);freopen("stick.out","w",stdout);
q[].num=,q[].cost=;
q[].num=,q[].cost=;
q[].num=,q[].cost=;
q[].num=,q[].cost=;
q[].num=,q[].cost=;
q[].num=,q[].cost=;
q[].num=,q[].cost=;
scanf("%d",&now);
dfs(,now);
for(int i=;i<=anslen;i++)printf("%d",ans[i]);
printf(" ");
if(now%==){
int num=(now-)/;
printf("");
for(int i=;i<=num;i++)printf("");
}
else {
int num=now/;
for(int i=;i<=num;i++)printf("");
}
fclose(stdin);fclose(stdout);
return ;
}

40分 暴力

/*
最大值直接特判一下,最小值用dp解决
dp[i]表示i根火柴能拼出的最小的数字,枚举该数字末尾的一位是几
*/
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <string>
#include <cstring>
#include <map>
#include <vector>
#include <set>
using namespace std;
long long dp[];
int f[],n;
int main()
{
freopen("stick.in","r",stdin);
freopen("stick.out","w",stdout);
f[]=; f[]=; f[]=; f[]=; f[]=;
f[]=; f[]=; f[]=; f[]=; f[]=;
dp[]=; dp[]=; dp[]=; dp[]=; dp[]=;dp[]=;
for (int i=; i<=; i++)
{
dp[i]=dp[i-f[]]*;
for (int j=; j<=; j++)
if (dp[i-f[j]]!=)
dp[i]=min(dp[i],dp[i-f[j]]*+j);
}
cin>>n;
cout<<dp[n]<<' ';
if (n%==) {cout<<; n-=;}
while (n){cout<<; n-=;}
return ;
}

100分 动态规划

听音乐

(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的情况。

提示:

LYK知道这个题目很长,但为了便于理解已经加了很多注释了……建议没看懂的同学们再重新看一遍……

#include<iostream>
#include<cstdio>
#define maxn 100010
using namespace std;
int n,m,a[maxn],ans;
bool vis[maxn];
int main(){
//freopen("Cola.txt","r",stdin);
freopen("music.in","r",stdin);freopen("music.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++)scanf("%d",&a[i]);
for(int i=;i<n;i++){//枚举之前听过的歌的数量
bool flag=;
for(int j=;j<=n-i;j++){
if(vis[a[j]]){
flag=;
break;
}
vis[a[j]]=;
}
for(int j=;j<=n-i;j++)vis[a[j]]=;
if(flag)continue;
for(int j=n-i+;j<=m;j+=n){//区间起点
for(int k=j,l=;k<=m&&l<=n;k++,l++){
if(vis[a[k]]){
flag=;
break;
}
vis[a[k]]=;
}
for(int k=j,l=;k<=m,l<=n;k++,l++)vis[a[k]]=;
if(flag)break;
}
if(!flag)ans++;
}
printf("%d",ans);
fclose(stdin);fclose(stdout);
return ;
}

50分 暴力

#include<iostream>
#include<cstdio>
#include<cstdlib>
#define maxn 100010
using namespace std;
int t[maxn],v1[maxn],v2[maxn],a[maxn];
int n,m,sum,ans;
bool OK(int x){
int i;
for(i=x-n+;i>=;i-=n)
if(!v2[i])return false;
i+=n;
if(i->&&!v1[i-])return false;
return true;
}
int main(){
freopen("music.in","r",stdin);freopen("music.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++)scanf("%d",&a[i]);
for(int i=;i<=n;i++)t[i]=;sum=;
for(int i=;i<=min(n,m);i++){
t[a[i]]++;
if(t[a[i]]==)sum++;
if(!sum)v1[i]=;
else v1[i]=;
}
if(!sum)v2[]=;else v2[]=;
for(int i=n+;i<=m;i++){
t[a[i]]++;
if(t[a[i]]==)sum++;
t[a[i-n]]--;
if(t[a[i-n]]==)sum--;
if(!sum)v2[i-n+]=;
else v2[i-n+]=;
}
for(int j=;j<=n;j++)t[j]=;sum=;
int j;
for(j=m;j>=;j--){
t[a[j]]++;
if(t[a[j]]>=)break;
}
for(int i=m;i>max(,m-n);i--){
if(j<=i)
if(OK(i))ans++;
}
if(ans)printf("%d\n",((n>=m&&ans==m)?n:ans));
else printf("");
return ;
}

100分

2017-10-1 清北刷题冲刺班a.m的更多相关文章

  1. 2017-10-4 清北刷题冲刺班p.m

    P102zhx a [问题描述]你是能看到第一题的 friends 呢.——hja两种操作:1.加入一个数.2.询问有多少个数是?的倍数.[输入格式]第一行一个整数?,代表操作数量.接下来?行,每行两 ...

  2. 2017-10-4 清北刷题冲刺班a.m

    P101zhx a [问题描述]你是能看到第一题的 friends 呢.——hjaHja 拥有一套时光穿梭技术,能把字符串以超越光速的速度传播,但是唯一的问题是可能会 GG.在传输的过程中,可能有四种 ...

  3. 2017-10-3 清北刷题冲刺班p.m

    a [问题描述]你是能看到第一题的 friends 呢.——hja给你一个只有小括号和中括号和大括号的括号序列,问该序列是否合法.[输入格式]一行一个括号序列.[输出格式]如果合法,输出 OK,否则输 ...

  4. 2017-10-3 清北刷题冲刺班a.m

    P99zhx a [问题描述]你是能看到第一题的 friends 呢.——hja怎么快速记单词呢?也许把单词分类再记单词是个不错的选择.何大爷给出了一种分单词的方法,何大爷认为两个单词是同一类的当这两 ...

  5. 2017-10-2 清北刷题冲刺班a.m

    一道图论神题 (god) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK有一张无向图G={V,E},这张无向图有n个点m条边组成.并且这是一张带权图,只 ...

  6. 2017-10-2 清北刷题冲刺班p.m

    最大值 (max) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK有一本书,上面有很多有趣的OI问题.今天LYK看到了这么一道题目: 这里有一个长度为n ...

  7. 2017-10-1 清北刷题冲刺班p.m

    一道图论好题 (graph) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK有一张无向图G={V,E},这张无向图有n个点m条边组成.并且这是一张带权图 ...

  8. 2017-10-7 清北刷题冲刺班p.m

    测试 A 同花顺 文件名 输入文件 输出文件 时间限制 空间限制card.cpp/c/pas card.in card.out 1s 512MB题目描述所谓同花顺,就是指一些扑克牌,它们花色相同,并且 ...

  9. 2017-10-7 清北刷题冲刺班a.m

    测试 A 消失的数字 文件名 输入文件 输出文件 时间限制 空间限制del.cpp/c/pas del.in del.out 1s 512MB题目描述现在,我的手上有 n 个数字,分别是 a 1 ,a ...

随机推荐

  1. Unity3D之Mesh【创建动态Mesh的学习网站】

    觉得不错!做记录! 1.http://gamerboom.com/archives/76484 2.http://jayelinda.com/ 3.几个私人的博客,可能有启发:http://blog. ...

  2. HashMap,Hashtable,TreeMap ,Map

    package com.wzy.list; import java.util.HashMap; import java.util.Hashtable; import java.util.Iterato ...

  3. 使用common-dbutils进行dao操作

    jar: 先引出database工具类: package cn.itcast.utils; public class Stu { private int id; private String snam ...

  4. 常用调试工具gdb,dbx,valgrind介绍一

    类UNIX下C/C++开发,代码调试比较麻烦,最原始的加跟踪调试很土,也很费时,特别是一个庞大的项目,代码行数非常大的时候调试起来非常费劲,当core dump时定位也不容易,这里介绍几个常用工具: ...

  5. SPOJ705 Distinct Substrings (后缀自动机&后缀数组)

    Given a string, we need to find the total number of its distinct substrings. Input T- number of test ...

  6. 1147. Heaps (30)

    In computer science, a heap is a specialized tree-based data structure that satisfies the heap prope ...

  7. shell ## %% 使用说明

    path='apps/home/usr/app/test.txt' a=${path##*/} b=${path#*/} c=${path%%/*} d=${path%/*}············· ...

  8. 三、使用maven创建scala工程(scala和java混一起)

    本文先叙述如何配置eclipse中maven+scala的开发环境,之后,叙述如何实现spark的本地运行.最后,成功运行scala编写的spark程序. 刚开始我的eclipse+maven环境是配 ...

  9. spring扩展点之四:Spring Aware容器感知技术,BeanNameAware和BeanFactoryAware接口,springboot中的EnvironmentAware

    aware:英 [əˈweə(r)] 美 [əˈwer] adj.意识到的;知道的;觉察到的 XXXAware在spring里表示对XXX感知,实现XXXAware接口,并通过实现对应的set-XXX ...

  10. phpMailer在CentOS 6.5下无法发送邮件的解决办法

    作者:ffsystem 网站在Windows平台上开发测试,完成了后同步到CentOS6.5 Nigix运行.发现phpMailer组件无法与SMTP服务器建立连接,导致无法发送邮件. 错误代码: p ...