哪位大神帮我看看,小白
  • 板块题目总版
  • 楼主CloudNinewhj
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/12/6 23:56
  • 上次更新2024/12/6 23:56:16
查看原帖
哪位大神帮我看看,小白
1606724
CloudNinewhj楼主2024/12/6 23:56

[NOIP1998 普及组] 幂次方

题目描述

任何一个正整数都可以用 22 的幂次方表示。例如 137=27+23+20137=2^7+2^3+2^0

同时约定次方用括号来表示,即 aba^b 可表示为 a(b)a(b)

由此可知,137137 可表示为 2(7)+2(3)+2(0)2(7)+2(3)+2(0)

进一步:

7=22+2+207= 2^2+2+2^0 ( 212^122 表示),并且 3=2+203=2+2^0

所以最后 137137 可表示为 2(2(2)+2+2(0))+2(2+2(0))+2(0)2(2(2)+2+2(0))+2(2+2(0))+2(0)

又如 1315=210+28+25+2+11315=2^{10} +2^8 +2^5 +2+1

所以 13151315 最后可表示为 2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)

输入格式

一行一个正整数 nn

输出格式

符合约定的 nn0,20, 2 表示(在表示中不能有空格)。

样例 #1

样例输入 #1

1315

样例输出 #1

2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)

提示

【数据范围】

对于 100%100\% 的数据,1n2×1041 \le n \le 2 \times {10}^4

NOIP1998 普及组 第三题 #include #include using namespace std; int main() { int l; int m; cin >> l >> m; int *a = new int[m]; int *b = new int[m]; int s = 0; for (int i = 0; i < m; i++) { cin >> a[i] >> b[i]; s = s + (b[i] - a[i]+1); } for (int i = 0; i < m; i++) { for (int j = 0; j < m; j++) { if (a[i] >= a[j] && a[i] <= b[j]&&b[i]>b[j]) { s=s-(b[j] - a[i]+1); } if (a[i] >a[j] && b[i] < b[j]) { s = s - (b[i] - a[i]+1); } if (a[i] >= a[j] && b[i] < b[j]) { s = s - (b[i] - a[i]+1); } if (a[i] > a[j] && b[i] <= b[j]) { s = s - (b[i] - a[i]+1); }

	}
}
int y = l - s+1;
cout << y;
delete[]a;
delete[]b; 
return 0;

}

2024/12/6 23:56
加载中...