NOIP2000提高组
第一题 进制转换
按照正常的方法除,如果余数是负数,把商加1,余数加-R。
第四题 方格取数
类似NOIP2008提高组第三题《传纸条》。
代码
第一题
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | #include <stdio.h> int a,r,m,tot,org; char ans[17],b[1000010]; int main() { for ( char i = '0' ;i <= '9' ;++i) ans[i - '0' ] = i; for ( int i = 10;i < 20;++i) ans[i] = i + 'A' - 10; scanf ( "%d%d" ,&a,&r); if (a == 0) { b[1] = '0' ; tot = 1; goto end; } org = a; while (a != 0) { m = a % r; a /= r; if (m < 0) { m += -r; ++a; } b[++tot] = ans[m]; } end: printf ( "%d=" ,org); for ( int i = tot;i > 0;--i) printf ( "%c" ,b[i]); printf ( "(base%d)\n" ,r); return 0; } |
第四题
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | #include <stdio.h> #define MAXN 11 int xx[2] = {0,-1}; int yy[2] = {-1,0}; int a[MAXN][MAXN],f[MAXN * 3][MAXN][MAXN]; int n,x,y,z; bool inmap( int x, int y) { return (x > 0) && (x <= n) && (y > 0) && (y <= n); } int main() { scanf ( "%d" ,&n); while (1) { scanf ( "%d" ,&x); if (!x) break ; scanf ( "%d%d" ,&y,&z); a[x][y] = z; } f[2][1][1] = a[1][1]; for ( int k = 3;k <= n * 2;++k) for ( int i = 1;i <= n;++i) for ( int j = i;j <= n;++j) { int y1 = k - i,y2 = k - j; if (inmap(i,y1) && inmap(j,y2)) for ( int l = 0;l < 2;++l) { int tx1 = i + xx[l],ty1 = y1 + yy[l]; if (inmap(tx1,ty1)) for ( int o = 0;o < 2;++o) { int tx2 = j + xx[o],ty2 = y2 + yy[o]; if (inmap(tx2,ty2)) { if ((i != j) && (f[k - 1][tx1][tx2] + a[i][y1] + a[j][y2] > f[k][i][j])) f[k][i][j] = f[k - 1][tx1][tx2] + a[i][y1] + a[j][y2]; if ((i == j) && (f[k - 1][tx1][tx2] + a[i][y1] > f[k][i][j])) f[k][i][j] = f[k - 1][tx1][tx2] + a[i][y2]; } } } } printf ( "%d\n" ,f[n * 2][n][n]); return 0; } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步