-
个人简介
NOIPS2016F. 愤怒的小鸟完整程序(手编耗时13天有注释)
#include <bits/stdc++.h> using namespace std; const int MAXN = 18; const double EPS = 1e-8; int n, m; double x[MAXN], y[MAXN]; int line[MAXN][MAXN]; // line[i][j] 表示经过猪i和猪j的抛物线能覆盖的猪的集合 int dp[1 << MAXN];
int sgn(double a) { if (fabs(a) < EPS) return 0; return a < 0 ? -1 : 1; } void solve() { cin >> n >> m; for (int i = 0; i < n; i++) { cin >> x[i] >> y[i]; } // 初始化line数组 memset(line, 0, sizeof(line));
// 处理单独一只猪的情况 for (int i = 0; i < n; i++) { line[i][i] = 1 << i; } // 计算任意两只猪确定的抛物线 for (int i = 0; i < n; i++) { for (int j = i + 1; j < n; j++) { // 计算抛物线 y = ax^2 + bx 的参数 // 代入两点: // y1 = ax1^2 + bx1 // y2 = ax2^2 + bx2 double x1 = x[i], y1 = y[i]; double x2 = x[j], y2 = y[j]; // 如果x1 == x2,不能确定唯一的抛物线(或者说明两点在同一竖直线上) // 但根据题意,两点x坐标可能相同,此时不能确定抛物线,跳过 if (fabs(x1 - x2) < EPS) continue; // 解方程组 double a = (y1 * x2 - y2 * x1) / (x1 * x1 * x2 - x2 * x2 * x1); double b = (y1 - a * x1 * x1) / x1;// 必须满足 a < 0 if (sgn(a) >= 0) continue; // 计算这条抛物线覆盖了哪些猪 int mask = 0; for (int k = 0; k < n; k++) { double yy = a * x[k] * x[k] + b * x[k]; if (fabs(yy - y[k]) < EPS) { mask |= (1 << k); } } line[i][j] = line[j][i] = mask; } } // DP for (int i = 0; i < (1 << n); i++) { dp[i] = n; // 最多每只猪单独发射 } dp[0] = 0; for (int mask = 0; mask < (1 << n); mask++) { // 如果已经覆盖了所有猪,跳过 if (mask == (1 << n) - 1) continue; // 找到第一个未覆盖的猪 int first = -1; for (int i = 0; i < n; i++) { if (!(mask & (1 << i))) { first = i; break; } } // 尝试从first开始,选择一条抛物线 // 情况1:单独发射一条抛物线只打first dp[mask | (1 << first)] = min(dp[mask | (1 << first)], dp[mask] + 1); // 情况2:选择一条经过first和其他猪的抛物线 for (int j = first + 1; j < n; j++) { if (mask & (1 << j)) continue; // 如果j已经覆盖,跳过 dp[mask | line[first][j]] = min(dp[mask | line[first][j]], dp[mask] + 1); } } cout << dp[(1 << n) - 1] << endl;}
int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
int T; cin >> T; while (T--) { solve(); } return 0;}
int r=10; int g=11; int b=9; void red(){ analogWrite(r,255); analogWrite(g,0); analogWrite(b,0); }
void o(){ analogWrite(r,255); analogWrite(g,0); analogWrite(b,245); } void z(){ analogWrite(r,255); analogWrite(g,0); analogWrite(b,134); } void w(){ analogWrite(r,255); analogWrite(g,255); analogWrite(b,245); } void y(){ analogWrite(r,234); analogWrite(g,212); analogWrite(b,0); } void setup() { // put your setup code here, to run once: pinMode(r,OUTPUT); pinMode(g,OUTPUT); pinMode(b,OUTPUT); } void loop() { // put your main code here, to run repeatedly: red(); analogWrite(r,255); analogWrite(g,0); analogWrite(b,255);analogWrite(r,255); analogWrite(g,0); analogWrite(b,255);
analogWrite(r,255); analogWrite(g,0); analogWrite(b,255); red(); delay(500); o(); delay(500);
z(); delay(500); w(); delay(500); y(); delay(500);}
| H H EEEEEE L L OOOOO | | H H E L L O O | | H H E L L O O | | H H E L L O O | | HHHHHHH EEEEE L L O O | | H H E L L O O | | H H E L L O O | | H H E L L O O | | H H EEEEEE LLLLL LLLLL OOOOO | for(float t = 0.0f;; t += 0.1f) { int sy = 0; float s = sinf(t); float a = ssss0.2f;
for(float z = 1.3f; z > -1.2f; z -= 0.1f) { _TCHAR* p = &buffer[sy++][0]; float tz = z*(1.2f - a);
for(float x = -1.5f; x < 1.5f; x += 0.05f) { float tx = x*(1.2f + a); float v = f(tx, 0.0f, tz); if(v <= 0.0f) { float y0 = h(tx, tz); float ny = 0.01f; float nx = h(tx + ny, tz) - y0; float nz = h(tx, tz + ny) - y0; float nd = 1.0f/sqrtf(nx*nx + ny*ny + nz*nz); float d = (nx + ny - nz)*nd*0.5f + 0.5f; *p++ = ramp[(int)(d*5.0f)]; } else *p++ = ' '; }}
for(int y = 0; y < 25; y++) { COORD coord = {0, y}; SetConsoleCursorPosition(o, coord); WriteConsole(o, buffer[y], 80, NULL, NULL); } Sleep(30); } AC: Answer Correct 正确的答案 CE:Compile Easily 轻松地通过编译 PC: Pass Compile 通过编译 WA:Wonerful Answer 极好的答案 RE:Right Enough 过于正确 TLE: Time Limit Enough 时间充裕 MLE: Memory Limit Enough 内存充裕 OLE: Output Limit Enough 输出充裕 UKE: Unknown Exactness 不明情况的正确
.======. | INRI | | | | | .' '. | _ xxxx _ | | /;-.__ / \ .-;\ | | -.'/'.-' | '.\ /' | | / | |/-.( | |.\ | | \ `;| | > |/| | / // | | |// | | (\ | | `` | | | | | | | | | ——————
胜利不会向山坡上的蒲公英一样脱手可得,但总有一些美好值得我们全力以赴! 死亡不是终点,遗忘才是! 大鹏一日同风起,扶摇直上九万里。
数学是火,点亮物理的灯;物理是灯,照亮化学的路;化学是路,通向生物的坑;生物是坑,埋葬学理的人。 文言是火,点亮历史宫灯;历史是灯,照亮社会之路;社会是路,通向哲学大坑;哲学是坑,埋葬文科生。
诈骗 https://xwjedu.cn/prep/assets/xiaotian.png
愤怒的小鸟完整程序(纯手编耗时21天 带注释喜欢的话点赞)
#include <bits/stdc++.h> using namespace std;
const int MAXN = 18; const double EPS = 1e-8;
int n, m; double x[MAXN], y[MAXN]; int line[MAXN][MAXN]; // line[i][j] 表示经过猪i和猪j的抛物线能覆盖的猪的集合 int dp[1 << MAXN];
int sgn(double a) { if (fabs(a) < EPS) return 0; return a < 0 ? -1 : 1; }
void solve() { cin >> n >> m; for (int i = 0; i < n; i++) { cin >> x[i] >> y[i]; }
// 初始化line数组 memset(line, 0, sizeof(line));
// 处理单独一只猪的情况 for (int i = 0; i < n; i++) { line[i][i] = 1 << i; }
// 计算任意两只猪确定的抛物线 for (int i = 0; i < n; i++) { for (int j = i + 1; j < n; j++) { // 计算抛物线 y = ax^2 + bx 的参数 // 代入两点: // y1 = ax1^2 + bx1 // y2 = ax2^2 + bx2 double x1 = x[i], y1 = y[i]; double x2 = x[j], y2 = y[j];
// 如果x1 == x2,不能确定唯一的抛物线(或者说明两点在同一竖直线上) // 但根据题意,两点x坐标可能相同,此时不能确定抛物线,跳过 if (fabs(x1 - x2) < EPS) continue; // 解方程组 double a = (y1 * x2 - y2 * x1) / (x1 * x1 * x2 - x2 * x2 * x1); double b = (y1 - a * x1 * x1) / x1; // 必须满足 a < 0 if (sgn(a) >= 0) continue; // 计算这条抛物线覆盖了哪些猪 int mask = 0; for (int k = 0; k < n; k++) { double yy = a * x[k] * x[k] + b * x[k]; if (fabs(yy - y[k]) < EPS) { mask |= (1 << k); } } line[i][j] = line[j][i] = mask; }}
// DP for (int i = 0; i < (1 << n); i++) { dp[i] = n; // 最多每只猪单独发射 } dp[0] = 0;
for (int mask = 0; mask < (1 << n); mask++) { // 如果已经覆盖了所有猪,跳过 if (mask == (1 << n) - 1) continue;
// 找到第一个未覆盖的猪 int first = -1; for (int i = 0; i < n; i++) { if (!(mask & (1 << i))) { first = i; break; } } // 尝试从first开始,选择一条抛物线 // 情况1:单独发射一条抛物线只打first dp[mask | (1 << first)] = min(dp[mask | (1 << first)], dp[mask] + 1); // 情况2:选择一条经过first和其他猪的抛物线 for (int j = first + 1; j < n; j++) { if (mask & (1 << j)) continue; // 如果j已经覆盖,跳过 dp[mask | line[first][j]] = min(dp[mask | line[first][j]], dp[mask] + 1); }}
cout << dp[(1 << n) - 1] << endl; }
int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
int T; cin >> T; while (T--) { solve(); } return 0; }
永恒枪械工坊:零;版本:1.20.1; 卓越前线;版本:1.21.1、1.20.1; Apocalypse Now;版本:1.20.1、1.19.4、1.19.2、1.18.2
不定时更新模组!!! 好玩服务器(别人的禁止开挂) mc.mcserver.icu; 1.21.4 游戏代码,复制到DEVC++上运行: https://note.ms/WJCforgame 没东西了
//迷宫 #include #include #include #include <windows.h> #include <conio.h>
using namespace std;
/* ================= 参数 ================= */ const int ROWS = 25; // 奇数(必须) const int COLS = 61; // 奇数(必须)
char maze[ROWS][COLS];
int playerX = 1, playerY = 1; int exitX = COLS - 2, exitY = ROWS - 2;
bool gameOver = false; bool win = false; int steps = 0;
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
/* ================= 颜色 ================= */ #define WALL_COLOR FOREGROUND_BLUE #define ROAD_COLOR FOREGROUND_GREEN #define PLAYER_COLOR (FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY) #define EXIT_COLOR (FOREGROUND_RED | FOREGROUND_INTENSITY)
/* ================= 方向 ================= */ const int dirs[4][2] = { {-2, 0}, {2, 0}, {0, -2}, {0, 2} };
/* ================= 工具 ================= */ void swap(int &a, int &b) { int t = a; a = b; b = t; }
void randomOrder(int a[4]) { for (int i = 0; i < 4; i++) { int r = rand() % 4; swap(a[i], a[r]); } }
/* ================= DFS 迷宫(100% 有解) ================= */ void dfs(int y, int x) { maze[y][x] = ' ';
int order[4] = {0, 1, 2, 3}; randomOrder(order); for (int i = 0; i < 4; i++) { int ny = y + dirs[order[i]][0]; int nx = x + dirs[order[i]][1]; if (ny > 0 && ny < ROWS - 1 && nx > 0 && nx < COLS - 1 && maze[ny][nx] == '#') { maze[y + dirs[order[i]][0] / 2] [x + dirs[order[i]][1] / 2] = ' '; dfs(ny, nx); } }}
void generateMaze() { srand((unsigned)time(NULL));
/* 全部围墙 */ for (int y = 0; y < ROWS; y++) for (int x = 0; x < COLS; x++) maze[y][x] = '#'; /* DFS 生成(保证连通) */ dfs(1, 1); /* 出口 */ maze[exitY][exitX] = 'E'; /* 玩家 */ playerY = 1; playerX = 1; maze[playerY][playerX] = 'P';}
/* ================= 隐藏光标 ================= */ void hideCursor() { CONSOLE_CURSOR_INFO ci; GetConsoleCursorInfo(hOut, &ci); ci.bVisible = FALSE; SetConsoleCursorInfo(hOut, &ci); }
/* ================= 绘制 ================= */ void draw() { COORD pos = {0, 0}; SetConsoleCursorPosition(hOut, pos);
for (int y = 0; y < ROWS; y++) { for (int x = 0; x < COLS; x++) { char c = maze[y][x]; if (c == '#') SetConsoleTextAttribute(hOut, WALL_COLOR); else if (c == 'P') SetConsoleTextAttribute(hOut, PLAYER_COLOR); else if (c == 'E') SetConsoleTextAttribute(hOut, EXIT_COLOR); else SetConsoleTextAttribute(hOut, ROAD_COLOR); putchar(c); } putchar('\n'); } SetConsoleTextAttribute(hOut, ROAD_COLOR); cout << "\n步数:" << steps << endl; cout << "W/A/S/D 移动 | Q 退出\n";}
/* ================= 输入 ================= */ void input() { if (!_kbhit()) return;
char ch = _getch(); /* Q 退出(不算通关) */ if (ch == 'q' || ch == 'Q') { gameOver = true; win = false; return; } int nx = playerX, ny = playerY; if (ch == 'w' || ch == 'W') ny--; if (ch == 's' || ch == 'S') ny++; if (ch == 'a' || ch == 'A') nx--; if (ch == 'd' || ch == 'D') nx++; if (nx >= 0 && ny >= 0 && nx < COLS && ny < ROWS && maze[ny][nx] != '#') { maze[playerY][playerX] = ' '; playerX = nx; playerY = ny; maze[playerY][playerX] = 'P'; steps++; if (playerX == exitX && playerY == exitY) { win = true; gameOver = true; } }}
/* ================= 主函数 ================= */ int main() { hideCursor(); generateMaze();
/* 操作说明 */ system("cls"); cout << "====== 迷宫游戏 ======\n"; cout << "W/A/S/D :移动\n"; cout << "Q :退出\n"; cout << "E :终点\n"; system("pause"); while (!gameOver) { draw(); input(); Sleep(30); } system("cls"); if (win) cout << "恭喜通关!\n"; else cout << "游戏结束(未通关)\n"; cout << "总步数:" << steps << endl; system("pause"); return 0; void motor(int s,int p,int d){pinMode(p,OUTPUT); pinMode(d,OUTPUT); s=s>255?255:s; s=s<-255?-255:s; if(s>=0){ analogWrite(p,s); digitalWrite(d,1); }else{ digitalWrite(d,0); analogWrite(p,-s); } } int c=0; void setup() { // put your setup code here, to run once: Serial.begin(9600); pinMode(2,INPUT); }
void loop() { // put your main code here, to run repeatedly: int a=digitalRead(2); Serial.println(a); // motor(255,3,11);
if(a1){ c++; delay(500); } if(c0){ motor(0,3,11); } if(c==2){ motor(80,3,11);
} if(c==3){ motor(255,3,11);
}if(c==4){ c=0;
}} }
-
通过的题目
-
最近活动
- 2026年7月暑假集训上午班c++作业(7.24) 作业
- 2026年7月暑假集训上午班c++作业(7.23) 作业
- 2026年7月暑假集训上午班c++作业(7.22) 作业
- 2026年7月暑假集训上午班c++作业(7.21) 作业
- 2026年7月暑假集训上午班c++作业(7.20) 作业
- 26年春周六下午班c++作业(6.6) 作业
- 26年春周六下午班c++作业(5.30) 作业
- 5.25课后作业 作业
- 26年春周六下午班c++作业(5.23) 作业
- 26年春周六下午班c++作业(5.16) 作业
- 2026春周六线上班xxm0502作业 作业
- 史家小学通州分校c++作业(4.28) 作业
- 26年春周六下午班c++作业(4.25) 作业
- 26年春周六下午班L1-19阶段测试(编程题) IOI
- 26年春周六下午班c++作业(4.18) 作业
- 26年春周六下午班L1-19阶段测试(理论题) IOI
- 26年春周六下午班c++作业(4.11) 作业
- 26年春周六下午班c++作业(3.28) 作业
- 3.23课后作业 作业
- 26年春周六下午班c++作业(3.21) 作业
- 26年春周六下午班c++作业(3.14) 作业
- 20260314 DC8-01 并查集 作业
- 20260309-和平里第一小学c++社团-求三个数的最小值 作业
- 26年春周六下午班c++作业-GESP1级真题(3.7) 作业
- 26年春周六下午班c++作业(2.28) 作业
- 26年寒假集训班-寒假作业-第1周 作业
- 寒假集训上午班-c++作业(2.2) 作业
- 寒假集训上午班-c++作业(2.1) 作业
- 寒假集训上午班-c++作业(1.30) 作业
- 寒假集训上午班-c++作业(1.29) 作业
- 寒假集训上午班-c++作业(1.28) 作业
- 寒假集训上午班-c++作业(1.27) 作业
- 寒假集训上午班-c++作业(1.26) 作业
- 【20260120】-2025秋C端周六下午班-break语句和continue语句 作业
- 【20260119】-2025秋C端周六下午班-for循环练习 作业
- 【20260118】-2025秋C端周六下午班-for循环 作业
- 【20260117】-2025秋C端周六下午班-while循环练习 作业
- 【20260103】-2025秋C端周六下午班-while循环 作业
- 【20251227】-2025秋C端周六下午班-阶段复习和测评(编程题) 作业
- 周六下午班-L1-06阶段测评(编程题) OI
- 周六下午班-L1-06阶段测评 OI
- 20251220-2025秋C端周六下午班-阶段复习和测评 作业
- 20251215-和平里第一小学C++社团-逻辑运算符 作业
- 20251213-2025秋C端周六下午班-逻辑运算符和switch语句 作业
- 20251206-2025秋C端周六下午班-分支嵌套和逻辑运算符 作业
- 20251201-和平里第一小学C++社团-if语句 作业
- 20251129-2025秋C端周六下午班-分支结构 作业
- 20251124-和平里第一小学C++社团-字符类型 作业
- 运河小学2025年秋-社团课题单3-王雨辰老师-20251124-数组专题 作业
- 20251122-2025秋C端周六下午班-存储空间 作业
- 20251117-和平里第一小学C++社团-取余运算 作业
- 20251115-2025秋C端周六下午班-ASCII和类型转换 作业
- 20251110-和平里第一小学C++社团-浮点数 作业
- 20251108-2025秋C端周六下午班-变量和数据类型 作业
- 20251103-和平里第一小学C++社团-设置域宽和cin输入 作业
- 20251101-2025秋C端周六下午班-第一个程序 作业
- 20251027-和平里第一小学C++社团-数据运算 作业
- 20251020-和平里第一小学C++社团-复合运算符 作业
- 20251013-和平里第一小学C++社团-累加器 作业
- 20250929-和平里第一小学C++社团-计数器 作业
- 20250922-和平里第一小学C++社团-程序结构和变量 作业
- 20250915-和平里第一小学C++社团-第一个程序 作业
题目标签
- 模拟
- 86
- 循环结构
- 33
- 数学
- 23
- 基础知识
- 23
- 字符串
- 19
- 数组
- 18
- 分支结构
- 16
- 一级
- 12
- 顺序结构
- 11
- 枚举
- 7
- 二维数组
- 7
- 字符
- 4
- 模拟与枚举
- 4
- 算术运算
- 3
- 浮点数
- 3
- 最值
- 3
- 字符处理
- 3
- 输出语句
- 2
- 数据类型
- 2
- sizeof
- 2