【有奖】NOIP普及组模拟赛 个人邀请赛 乐多赛

题目描述
日本数学家角谷有一个猜想:任意一个自然数,经过以下过程,最终会得到1。现在请你打印出任意一个数使用角谷猜想转换为1需要几次。
演变方式:
1.如果这个数为奇数,则将它×3+1。如果这个数为偶数,则将它÷2。
2.当这个数为1时,结束计算。
输入输出格式
输入格式:
输入共1行。
第1行:a,代表演变前的数。
输出格式:
一个自然数n,表示需要n次才能用角谷猜想把这个数变成1
输入输出样例
8
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 去除多余括号
题目描述
有一个四则运算的表达式(+、-、*、/),它可能有一些多余的括号可以去掉。把这些括号去掉的条件是:可以改变运算顺序,只要表达式计算结果不变即可(每去掉一组括号都不能使结果变化)。现在请你输出去掉多余括号的表达式。
输入输出格式
输入格式:
一个表达式
输出格式:
去掉所有多余括号的表达式
输入输出样例
a+(b-c)
a+b-c
1+2*3
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-1背包问题。只是每件将要偷的物品的重量和价值都是带有1位小数的实数。小偷的背包可以装入物品的最大重量也是带有1位小数。
输入输出格式
输入格式:
两个数m (小偷背包的承重)和 n(物品件数) (1.0<=m<=100.0, 1<=n<=20)
以下是n行是每件物品的重量和价值。
输出格式:
最大价值。(带有1位小数,如果是整数,请输出 XXX.0)
输入输出样例
34.5 3
12.4 21.5
15.3 18.4
20.2 10.2
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 不同的二叉树
题目描述
由n个节点可组成多少个不同的二叉树?
输入输出格式
输入格式:
一个正整数n。
输出格式:
不同的二叉树的个数。
输入输出样例
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普及组模拟赛 个人邀请赛 乐多赛的更多相关文章
- 2017.1.16【初中部 】普及组模拟赛C组总结
2017.1.16[初中部 ]普及组模拟赛C组 这次总结我赶时间,不写这么详细了. 话说这次比赛,我虽然翻了个大车,但一天之内AK,我感到很高兴 比赛 0+15+0+100=115 改题 AK 一.c ...
- ZROI 普及组模拟赛02总结
ZROI 普及组模拟赛02总结 先放[网址][http://zhengruioi.com/contest/96] 可能是有一段时间没有打这种正式的比赛了,今天打的很奇怪... T1 模拟水题 既然是普 ...
- 2016.9.15初中部上午NOIP普及组比赛总结
2016.9.15初中部上午NOIP普及组比赛总结 2016.09.15[初中部 NOIP普及组 ]模拟赛 又翻车了!表示时超和空超很可恨! 进度 比赛:AC+0+0+20=120 改题:AC+80+ ...
- 2016.10.29初中部上午NOIP普及组比赛总结
2016.10.29[初中部 NOIP普及组 ]模拟赛 做得好爽! 进度: 比赛:35+45+AC+0=180 改题:AC+AC+AC+0=300 幸运的数 有点无语--之前怕超限,还特意利用程序打了 ...
- 2016.9.24初中部上午NOIP普及组比赛总结
2016.9.24初中部上午NOIP普及组比赛总结 2016.09.24[初中部 NOIP普及组 ]模拟赛 其实这次我没比赛,早上去参加亲子活动去了. 不过在下午我做完了所有的题,感觉还好. 进度 现 ...
- 2016.9.17初中部下午NOIP普及组比赛总结
2016.9.17初中部下午NOIP普及组比赛总结 2016.09.17[初中部 NOIP普及组 ]模拟赛 最近几次的题目都不是自己擅长的啊... 不过含金量挺高的,也好... 进度: 比赛:0+0+ ...
- 2321. 【NOIP普及组T1】方程
2321. [NOIP普及组T1]方程 时间限制: 1000 ms 空间限制: 262144 KB 题目描述
- 2016.9.3初中部上午NOIP普及组比赛总结
2016.9.3初中部上午NOIP普及组比赛总结 链接:https://jzoj.net/junior/#contest/home/1339 这次真爽,拿了个第四!(我还被班主任叫过去1小时呢!) 进 ...
- 2016.8.18上午纪中初中部NOIP普及组比赛
2016.8.18上午纪中初中部NOIP普及组比赛 链接:https://jzoj.net/junior/#contest/home/1336 翻!车!啦!好吧,那是因为大神归来. 进度: 比赛:AC ...
随机推荐
- Android中方便好用的倒计时类
一.使用api提供的类进行操作 Android提供了CountDownTimer来让我们进行倒计时,可以让我们很方便的进行倒计时的操作.使用方式也很简单,下面直接贴代码就好了: package ...
- iOS 简单工厂模式
iOS 简单工厂模式 什么是简单工厂模式? 简单工厂模式中定义一个抽象类,抽象类中声明公共的特征及属性,抽象子类继承自抽象类,去实现具体的操作.工厂类根据外界需求,在工厂类中创建对应的抽象子类实例并传 ...
- android 显示意图
//显示意图 public void enter(View view) { Intent intent = new Intent();//创建一个空的意图 intent.setClassName(ge ...
- IOS之--UI进阶--多控制器管理第一天
01-项目中常见的文件(LaunchScreen) Xcode5 框架是苹果事先已经导入进去的.在项目的结构当中就能够看到导入的框架. Xcode6 会自动导入一些觉见的框架.在项目结构当中,看不到已 ...
- mockmvc 静态引入
perform方法编译报错时,在头部静态引入即可 import static org.springframework.test.web.servlet.result.MockMvcResultMatc ...
- MongoDB 初识1: 启动MongoDB
Mongodb可作为网络服务器运行,客户端可连接到该服务器并执行操作. 1. 首先,用户必须下载Mongodb并解压,运行mongod命令启动实例 下载地址:http://www.mongodb.or ...
- [LoadRunner]性能测试实践_Hessian协议脚本编写
第一步,新建LR的脚本,选择Java Vuser协议: 第二步,编写hessian测试脚本,如下: import lrapi.lr; import java.net.MalformedURLExcep ...
- 深入掌握Java中的enum
对于要在程序中要表示有限种类的某事物,一般我们可以采用两种方式,一是使用:public static final String 常量:二是使用enum来表示.一般而言前者简单,但是不能够很好的提供更多 ...
- 写过的一些Oracle相关的博客
Oracle体系结构:http://blog.chinaunix.net/uid/25909722/cid-164523-list-1.html Oracle优化:http://blog.chinau ...
- C#操作XML小结(转)
一.简单介绍 using System.Xml; //初始化一个xml实例 XmlDocument xml=new XmlDocument(); //导入指定xml文件 xml.Load(path); ...