1604 amp(暴力)~~(oj题)

#(File IO): input:amp.in output:amp.out

@[TOC]

时间限制: 1000 MS
空间限制: 128000 KB

题目描述

西西需要把输入的电压 1 1 1伏通过一系列电压放大器放大成原来的 N N N倍,然后输出。
西西现在手上有两种放大器:
第一种能够把 X X X伏的电压放大成 2 X − 1 伏 2X-1伏 2X1
第二种能够把 X X X伏的电压放大成 2 X + 1 伏 2X+1伏 2X+1
放大器是串联(即按顺序放在一条线路上)的。
现在西西手上有用不完的放大器,他希望能组出一个电路,使用数量最少的放大器,使得电压被放大了刚好 N N N倍。

输入解释

1 1 1 1 1 1个正整数 N ( 1 < = N < = 2 ∗ 1 0 9 ) N(1<=N<=2*10^9) N(1<=N<=2109)

输出解释

如果无法组成电路则输出一行No solution.
否则输出两行,第一行一个整数表示最少的放大器个数K,第二行K个用空格隔开的1或2,表示放大器序列。1表示第一种,2表示第二种,其中左边为输入端。如果有多解输出任意一组。

样例输入#1

5 5 5

样例输出#1

2 2 2
2 2 2 1 1 1

数据范围限制

20 20 20%的数据中 N < = 1000 N<=1000 N<=1000

50 50 50%的数据中, N < = 1000000 N<=1000000 N<=1000000

100 100 100%的数据如题。

提示

**先经过放大器 2 2 2 1 ∗ 2 + 1 = 3 1*2+1=3 12+1=3,然后经过 1 1 1 3 ∗ 2 − 1 = 5 3*2-1=5 321=5。满足要求 **

思路~此题有点水啊~

没什么思路,额,就用暴力来打就行了,按着题意慢慢来,4~5分钟就AC一道题。

Violence AC Code

#include <bits/stdc++.h>
using namespace std;
int n,x,t,ans[105];//定义
int main(){
	freopen("amp.in","r",stdin);//文件输入(比赛中一定要加freopen,不然就会炸掉;一般做题也尽量加。)
    freopen("amp.out","w",stdout);//文件输出(比赛中一定要加freopen,不然就会炸掉;一般做题也尽量加。)
    scanf("%d",&n);//输入正整数n
    if(n%2==0)//判断是否可以组成电路,如果无法组成电路则输出一行No solution,否则输出两行,第一行一个整数表示最少的放大器个数K,
    		  //第二行K个用空格隔开的1或2,表示放大器序列。1表示第一种,2表示第二种,其中左边为输入端。如果有多解输出任意一组。  
		printf("No solution");
	else
	{
		x=n,t=0;
		while(x!=1)
		{
			if(((x-1)/2+1)%2==1)
				x=(x+1)/2,ans[++t]=1;
			else
				x=(x-1)/2,ans[++t]=2;
		}
		printf("%d\n",t);
		for(int i=t;i>=1;--i)
			printf("%d ",ans[i]);
	}
	return 0;//结束
}

暴力奇迹骗分样例

暴力

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值