题目描述

日本数学家角谷有一个猜想:任意一个自然数,经过以下过程,最终会得到1。现在请你打印出任意一个数使用角谷猜想转换为1需要几次。

演变方式:

1.如果这个数为奇数,则将它×3+1。如果这个数为偶数,则将它÷2。

2.当这个数为1时,结束计算。

输入输出格式

输入格式:

输入共1行。

第1行:a,代表演变前的数。

输出格式:

一个自然数n,表示需要n次才能用角谷猜想把这个数变成1

输入输出样例

输入样例#1:

8
输出样例#1:

3

说明

数据可能很大,要用高精度

#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
#define N 200500
int num[N]={};
int n,m,len=;
char s[N];
unsigned long long tot=;
void mul(int k){
for(int i=;i<=len;i++){
num[i]*=k;
if(i>){
num[i]+=num[i-]/;
num[i-]%=;
} }
for(;num[len]>=;len++){
num[len+]=num[len]/;
num[len]%=;
}
}
void div(int k){
int d=;
for(int i=len;i;i--){
d=d*+num[i];
num[i]=d/k;
d%=k;
}
while(!num[len]) len--;
}
void add1(){
int t=;
num[]+=;
while(num[t]>) num[t+]+=num[t]/,num[t]%=,t++;
if(t>len) len=t;
}
bool judge(){
if(len==&&num[]==) return ;
return ;
}
bool odd(){
return num[]&;
}
void dfs(){
if(judge()) return ;
if(odd()) mul(),add1();
else div();
tot++;
dfs();
}
int main(){
cin>>s;
int p=;
len=strlen(s);
for(int i=len-;i>=;i--) num[++p]=s[i]-'';
dfs();
cout<<tot;
return ;
}

U5190 去除多余括号

    • 0通过
    • 56提交
  • 题目提供者huangxuanao
  • 标签
  • 难度尚无评定

提交

最新讨论

  • 暂时没有讨论

题目描述

有一个四则运算的表达式(+、-、*、/),它可能有一些多余的括号可以去掉。把这些括号去掉的条件是:可以改变运算顺序,只要表达式计算结果不变即可(每去掉一组括号都不能使结果变化)。现在请你输出去掉多余括号的表达式。

输入输出格式

输入格式:

一个表达式

输出格式:

去掉所有多余括号的表达式

输入输出样例

输入样例#1:

a+(b-c)
输出样例#1:

a+b-c
输入样例#2:

1+2*3
输出样例#2:

1+2*3

说明

数据保证所有的括号合法,表达式长度不超过100个字符

#include<string>
#include<iostream>
using namespace std;
inline bool isOperator(char c){
return c=='+'||c=='-'||c=='*'||c=='/';
}
bool allMulOrDiv(const string& exp){
for(int i=,len=exp.size();i<len;++i){
if(exp[i]=='('){
int cnt=;
for(++i;true;++i){
if(exp[i]=='(') ++cnt;
else if(exp[i]==')'){
--cnt;
if(!cnt) break;
}
}
++i;
}
if(exp[i]=='+'||exp[i]=='-') return false;
}
return true;
}
int findMatchedLeft(const string& exp,int r){
int countOfRight=;
for(--r;r>=;--r){
if(exp[r]==')') ++countOfRight;
else if(exp[r]=='('){
--countOfRight;
if(!countOfRight) break;
}
}
return r;
}
string& simplify(string& exp){
int left,right=;
char head,tail,can;
while((right=exp.find(')',right))!=string::npos){
left=findMatchedLeft(exp,right);
//get info
if(left&&isOperator(exp[left-])) head=exp[left-];
else head='+';
if(right+<exp.size()&&isOperator(exp[right+])) tail=exp[right+];
else tail='+';
//analyze
if(right-left==) can=;
else if(head=='/') can=;
else if(head=='*'||head=='-') can=allMulOrDiv(exp.substr(left+,right-left-));
else can=tail=='+'||tail=='-'||allMulOrDiv(exp.substr(left+,right-left-));
//process
if(can){
exp.erase(left,).erase(right-,);
--right;
}
else ++right;
}
return exp;
}
int main(){
string exp;
getline(cin,exp);
cout<<simplify(exp);
return ;
}

更正AC代码:

#include<cstdio>
using namespace std;
int hasExcess(char s[],int leftBracket,int rightBracket){
int i,leftAcount;
//判断"-(a+b)"类型
if(s[leftBracket-]=='-'){
i=leftBracket;
leftAcount=;
while(++i<rightBracket){
if(s[i]=='(') leftAcount ++;
if(s[i]=='+'&&leftAcount==) return ;
}
}
if(s[leftBracket-]=='/') return ;
//判断"加或减(a 任意 b)加或减"类型
if(s[leftBracket-]!='*'&&s[leftBracket-]!='/'&&s[rightBracket+]!='*'&&s[rightBracket+]!='/') return ;
//判断"*(a*b)乘或除以"类型
i=leftBracket;
leftAcount=;
while(++i<rightBracket){
if(s[i]=='(') leftAcount ++;
if(s[i]=='*'&&leftAcount==) return ;
}
return ;
}
int delExcessBracket(char s[],int index){
int leftBracket,rightBracket;
while(s[index]!='\0'){
if(s[index]==')') return index;
if(s[index]=='('){
leftBracket=index;
index=rightBracket=delExcessBracket(s,index+);
if(hasExcess(s,leftBracket,rightBracket))
s[leftBracket]=s[rightBracket]=' ';
}
index++;
}
}
int main(){
char str[];
scanf("%s",str);
delExcessBracket(str,);
for(int i=;str[i]!='\0';i++) if(str[i]!=' ') printf("%c",str[i]);
return ;
}

U5191 小偷的背包

    • 0通过
    • 79提交
  • 题目提供者huangxuanao
  • 标签
  • 难度尚无评定

提交

最新讨论

  • 暂时没有讨论

题目描述

小偷的背包问题,大家知道是0-1背包问题。只是每件将要偷的物品的重量和价值都是带有1位小数的实数。小偷的背包可以装入物品的最大重量也是带有1位小数。

输入输出格式

输入格式:

两个数m (小偷背包的承重)和 n(物品件数) (1.0<=m<=100.0, 1<=n<=20)

以下是n行是每件物品的重量和价值。

输出格式:

最大价值。(带有1位小数,如果是整数,请输出 XXX.0)

输入输出样例

输入样例#1:

34.5  3
12.4 21.5
15.3 18.4
20.2 10.2
输出样例#1:

39.9

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
const int N=1e4+;
int n;
double m,v[N],c[N],f[N];
int main(){
scanf("%lf%d",&m,&n);
int V=m*;
for(int i=;i<=n;i++) scanf("%lf%lf",&v[i],&c[i]),v[i]*=,c[i]*=;
for(int i=;i<=n;i++){
for(int j=V;j>=v[i];j--){
f[j]=max(f[j],f[j-(int)v[i]]+c[i]);
}
}
f[V]/=;
printf("%.1lf",f[V]);
return ;
}

U5215 不同的二叉树

    • 0通过
    • 119提交
  • 题目提供者huangxuanao
  • 标签
  • 难度尚无评定

提交

最新讨论

  • 暂时没有讨论

题目描述

由n个节点可组成多少个不同的二叉树?

输入输出格式

输入格式:

一个正整数n。

输出格式:

不同的二叉树的个数。

输入输出样例

输入样例#1:

1
输出样例#1:

1

说明

测试数据规模:

保证40%的数据n<=35;

保证100%的数据n<=5000。

保证120%的数据n<=10000。

#include<cstdio>
#include<cmath>
int a[][],b[],n;
void catalan()
{
int i,j,len,digit,t;
a[][]=b[]=len=;
for(i=;i<=n;i++)
{
for(j=;j<len;j++)
a[i][j]=a[i-][j]*(*(i-)+);
digit=;
for(int j=;j<len;j++){
t=a[i][j]+digit;
a[i][j]=t%;
digit=t/;
}
while(digit){
a[i][len++]=digit%;
digit/=;
}
digit=;
for(int j=len-;j>=;j--){
t=digit*+a[i][j];
a[i][j]=t/(i+);
digit=t%(i+);
}
while(!a[i][len-])len--;
b[i]=len;
}
}
int main(){
scanf("%d",&n);
catalan();
for(int i=b[n]-;i>=;i--) printf("%d",a[n][i]);
return ;
}

 更正AC代码:

#include<cstdio>
using namespace std;
const int N=1e6+;
int n,len;
int f[N];
void mul(int x){
for(int i=;i<=len;i++) f[i]*=x;
for(int i=;i<=len;i++){
f[i+]+=f[i]/;
f[i]=f[i]%;
}
while(f[len+]){
f[len+]=f[len+]/;
f[len+]%=;
len++;
}
}
void div(int x){
for(int i=len;i>=;i--){
f[i-]+=f[i]%x*;
f[i]/=x;
}
for(int i=len;i>=;i--)if(f[i]){len=i;break;}
}
int main(){
scanf("%d",&n);
f[len=]=;
for(int i=;i<=n;i++)mul(*i-),div(i+);
for(int i=len;i;i--) printf("%d",f[i]);
return ;
}

【有奖】NOIP普及组模拟赛 个人邀请赛 乐多赛的更多相关文章

  1. 2017.1.16【初中部 】普及组模拟赛C组总结

    2017.1.16[初中部 ]普及组模拟赛C组 这次总结我赶时间,不写这么详细了. 话说这次比赛,我虽然翻了个大车,但一天之内AK,我感到很高兴 比赛 0+15+0+100=115 改题 AK 一.c ...

  2. ZROI 普及组模拟赛02总结

    ZROI 普及组模拟赛02总结 先放[网址][http://zhengruioi.com/contest/96] 可能是有一段时间没有打这种正式的比赛了,今天打的很奇怪... T1 模拟水题 既然是普 ...

  3. 2016.9.15初中部上午NOIP普及组比赛总结

    2016.9.15初中部上午NOIP普及组比赛总结 2016.09.15[初中部 NOIP普及组 ]模拟赛 又翻车了!表示时超和空超很可恨! 进度 比赛:AC+0+0+20=120 改题:AC+80+ ...

  4. 2016.10.29初中部上午NOIP普及组比赛总结

    2016.10.29[初中部 NOIP普及组 ]模拟赛 做得好爽! 进度: 比赛:35+45+AC+0=180 改题:AC+AC+AC+0=300 幸运的数 有点无语--之前怕超限,还特意利用程序打了 ...

  5. 2016.9.24初中部上午NOIP普及组比赛总结

    2016.9.24初中部上午NOIP普及组比赛总结 2016.09.24[初中部 NOIP普及组 ]模拟赛 其实这次我没比赛,早上去参加亲子活动去了. 不过在下午我做完了所有的题,感觉还好. 进度 现 ...

  6. 2016.9.17初中部下午NOIP普及组比赛总结

    2016.9.17初中部下午NOIP普及组比赛总结 2016.09.17[初中部 NOIP普及组 ]模拟赛 最近几次的题目都不是自己擅长的啊... 不过含金量挺高的,也好... 进度: 比赛:0+0+ ...

  7. 2321. 【NOIP普及组T1】方程

    2321. [NOIP普及组T1]方程 时间限制: 1000 ms  空间限制: 262144 KB 题目描述

  8. 2016.9.3初中部上午NOIP普及组比赛总结

    2016.9.3初中部上午NOIP普及组比赛总结 链接:https://jzoj.net/junior/#contest/home/1339 这次真爽,拿了个第四!(我还被班主任叫过去1小时呢!) 进 ...

  9. 2016.8.18上午纪中初中部NOIP普及组比赛

    2016.8.18上午纪中初中部NOIP普及组比赛 链接:https://jzoj.net/junior/#contest/home/1336 翻!车!啦!好吧,那是因为大神归来. 进度: 比赛:AC ...

随机推荐

  1. 深入理解Activity -动手写实例来感受Activity的启动模式

    介绍 上篇提到了Activity的任务,任务栈,以及启动模式.对这些概念有了了解以后,自己写一下例子来感受一下,就当作复习和加深印象了.如果对概念不熟悉的可以参考:深入理解Activity-任务,回退 ...

  2. CocoaPods:管理Objective-c 程序中各种第三方开源库关联

    在我们的iOS程序中,经常会用到多个第三方的开源库,通常做法是去下载最新版本的开源库,然后拖拽到工程中. 但是,第三方开源库的数量一旦比较多,版本的管理就非常的麻烦.有没有什么办法可以简化对第三方库的 ...

  3. java集合 之 set 集合

    set集合可以存储多个对象,但并不会记住元素的存储顺序,也不允许集合中有重复元素(不同的set集合有不同的判断方法). 1.HashSet类 HashSet按照Hash算法存储集合中的元素,具有很好的 ...

  4. Java主要有那几种文件类型?各自的作用是什么

    1.源代码.java程序员编译的源代码. 2..class  字节码文件 jvm实现跨平台的中间编译文件. 3.jar包 讲字节码文件打包好,便于查找和使用.

  5. 【SQL查询】集合查询之INTERSECT

    [SQL查询]集合查询之INTERSECT 1  BLOG文档结构图 2  前言部分 2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~ ...

  6. 从零开始学node(一): nodejs开发环境的配置

    从零开始学node系列(一): nodejs环境安装 一.安装node.js 1. node官网,node安装十分方便快捷,所以这一步还是很顺利的. 2. webstorm是一款强大的前端开发IDE, ...

  7. kvm解决1000M网卡问题

    1.当我们安装完虚拟机, 发现虚拟机竟然是 100M 网络, 传输速率很低, 那是怎么导致的呢,如何来解决呢? 需要我们修改 vm01.xml 配置文件网卡段,添加如下红色标记行,改 为 e1000, ...

  8. AngularJS跨域请求

    本文主要针对网上各种跨域请求的总结,并加入自己的验证判断,实现工作中遇到的跨域问题.所涉及到的领域很小,仅仅局限于:AngularJS CORS post 并同时需要实现json数据传送给服务器. 首 ...

  9. FIR数据广播结构-提高时钟速率

    直接型的信号流图 采用转置得到广播结构的信号流图 对于一个常系数四阶的FIR滤波器 直接型的RT L结构如下: 转置后的RTL结构

  10. selenium获取html的表格单元格数据

    获取网页的表格的某个单元格的值,思路: 1.获取表格 2.获取表格的所有行 3.根据某一行获取该行的所有列 4.根据某一列获得该行该列的单元格值 根据以上思路,可以知道,只需要行.列就可以得到单元格的 ...