社区讨论
送上答案表和打表源码
P1149[NOIP 2008 提高组] 火柴棒等式参与者 18已保存回复 17
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 17 条
- 当前快照
- 1 份
- 快照标识符
- @mi7d19vl
- 此快照首次捕获于
- 2025/11/20 19:40 4 个月前
- 此快照最后确认于
- 2025/11/20 22:07 4 个月前
我是蒟蒻,打表都用掉了两秒的时间(呜呜呜)(不过用 -O100 可以优化到0.1s)
先上答案:
CPP#include <bits/stdc++.h>
using namespace std;
int ans[30];
int main()
{
ans[0] = 0;
ans[1] = 0;
ans[2] = 0;
ans[3] = 0;
ans[4] = 0;
ans[5] = 0;
ans[6] = 0;
ans[7] = 0;
ans[8] = 0;
ans[9] = 0;
ans[10] = 0;
ans[11] = 0;
ans[12] = 0;
ans[13] = 1;
ans[14] = 2;
ans[15] = 8;
ans[16] = 9;
ans[17] = 6;
ans[18] = 9;
ans[19] = 29;
ans[20] = 39;
ans[21] = 38;
ans[22] = 65;
ans[23] = 88;
ans[24] = 128;
ans[25] = 192;
ans[26] = 319;
ans[27] = 454;
ans[28] = 624;
int n;
cin >> n;
cout << ans[n] << endl;
return 0;
}
然后是打表
CPP#include <bits/stdc++.h>
using namespace std;
const int maxSearch = 1000;
const int c[] = {6, 2, 5, 5, 4, 5, 6, 3, 7, 6};
int dp[maxSearch + 5];
inline int getValue(int n)
{
return dp[n] ? dp[n] : (dp[n] = (n < 10) ? c[n] : getValue(n / 10) + getValue (n % 10));
}
int main()
{
int n;
cin >> n;
n -= 4;
for (int k = -4; k < 25; ++k)
{
printf("ans[%d] = ", k + 4);
int cnt = 0;
for (int i = 0; i < maxSearch; ++i)
for (int j = 0; j < maxSearch; ++j)
if (getValue(i) + getValue(j) + getValue(i + j) == k)
++cnt;
printf("%d;\n", cnt);
}
return 0;
}
回复
共 17 条回复,欢迎继续交流。
正在加载回复...