题目描述

日本数学家角谷有一个猜想:任意一个自然数,经过以下过程,最终会得到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. 获取经过跳转后的url地址

    粗略一算,不写code已经好几个月了. 昨日受兄弟所托,为他写了一个小小的程序. 程序功能: 自动获取跳转后的Url地址 如下图所示: (newUrl.txt为转换后的地址信息...) 实现过程: 每 ...

  2. virtualbox迁移至vcenter/vmware workstation

    参考文献: http://www.itsecurenet.com/virtualbox-ova-to-vsphere-ovf/ http://www.techrepublic.com/blog/win ...

  3. IOS NSThread

    任何一个 iOS 应用程序都是由一个或者多个线程构成的.无论你是否使用了多线程编程技术,至少有 1 个 线程被创建.多线程就是为了提高引用程序的工作效率!避免阻塞主线程!当我们没有用任何多线程技术的话 ...

  4. Silverlight项目笔记6:Linq求差集、交集&检查网络连接状态&重载构造函数复用窗口

    1.使用Linq求差集.交集 使用场景: 需要从数据中心获得用户数据,并以此为标准,同步系统的用户信息,对系统中多余的用户进行删除操作,缺失的用户进行添加操作,对信息更新了的用户进行编辑操作更新. 所 ...

  5. 27个提升效率的iOS开源库推荐

    DZNEmptyDataSet(UI,空表格视图解算器) PDTSimpleCalendar(UI,drop-in日历组件) MagicalRecord(实施活跃记录模式的Core Data助手) C ...

  6. python数据结构-基本数据类型

  7. 算法(三)粒子群算法PSO的介绍

    一.引言 在讲算法之前,先看两个例子: 例子一:背包问题,一个书包,一堆物品,每个物品都有自己的价值和体积,装满书包,使得装的物品价值最大. 例子二:投资问题,n个项目,第i个项目投资为ci 收益为p ...

  8. 问题解决——基于MSCOMM32.OCX控件的类在客户机不能创建控件

    大家不要笑我了,我不喜欢用那个人家写的串口类. 所以导出了MSCOMM32.OCX的类,然后在此基础上写了一个串口打印机的小工具类. -------------声明--------------- 本文 ...

  9. ubuntu创建、删除文件及文件夹方法

    mkdir 目录名         => 创建一个目录 rmdir 空目录名      => 删除一个空目录 rm 文件名 文件名   => 删除一个文件或多个文件 rm –rf 非 ...

  10. cd dirname $0

    这个命令的功能是返回脚本正在执行的目录. 可以根据这个目录来定位运行的程序的相对位置. 这样,对shell脚本里面的相对目录的路径代码就比较安全了.在任何一台服务器上面都可以安全执行.