有源码手机怎么搭建网站,深圳网站搭建哪里找,wordpress做站群,html5移动网站制作课前C小程序#xff08;关机#xff0c;休眠#xff0c;注销程序#xff09;
有的时候我们需要让电脑在一段时间工作而不能关机#xff0c;但是工作完成之后不关机会造成用电浪费#xff0c;那么使用自动关机命令#xff0c;就不用担心电脑一直开着会浪费电啦。夜里看电…课前C小程序关机休眠注销程序
有的时候我们需要让电脑在一段时间工作而不能关机但是工作完成之后不关机会造成用电浪费那么使用自动关机命令就不用担心电脑一直开着会浪费电啦。夜里看电影双眼迷离睁不开不想去关机有个自动关机多好啊下载资料电影音乐有需要出门或者夜深需要休息估计一些下载时间设置个定时自动关机吧下班了资料没传完不要紧设置个定时自动关机放心下班这些都不是问题只需几步多种情况都搞定
当然我们不能简单的关机win电源关机我打算用C。
C关机……代码:
//1、直接关机
#include windows.h
int main()
{system (shutdown -p);retrun 0;
}
//2、30秒后关机
//#include windows.h
//int main()
//{
// system (shutdown -s);
//}
//3、自定义时间后关机
//#include windows.h
//int main()
//{
// system (shutdown -s -t 180); // 180是秒数这里是三分钟后关机
//}
//4、深度休眠
//#include windows.h
//int main()
//{
// system (shutdown -h);
//}
//5、注销
//#include windows.h
//int main()
//{
// system (shutdown -l);
//}
//6、取消关机计划
//#include windows.h
//int main()
//{
// system (shutdown -a);
//}
正片开始
上一次讲了【万题详解】DFS搜索专题合集上-CSDN博客今天来讲讲其他DFS搜索题目。
提示
不会用洛谷的可以看看这篇文章——洛谷使用指南
还有以下链接是题目的链接。
1.迷宫 - 洛谷
2.魔术数字游戏 - 洛谷
3.[COCI2008-2009 #2] PERKET - 洛谷
4.kkksc03考前临时抱佛脚 - 洛谷
P1605 迷宫 给定一个 N×M 方格的迷宫迷宫里有 T 处障碍障碍处不可通过。 在迷宫中移动有上下左右四种方式每次只能移动一个方格。数据保证起点上没有障碍。 给定起点坐标和终点坐标每个方格最多经过一次问有多少种从起点坐标到终点坐标的方案。 输入格式 第一行为三个正整数 N,M,T分别表示迷宫的长宽和障碍总数。 第二行为四个正整数SX,SY,FX,FYSX,SY 代表起点坐标FX,FY 代表终点坐标。 接下来 T 行每行两个正整数表示障碍点的坐标。 输出格式 输出从起点坐标到终点坐标的方案总数。 输入输出样例 输入 #1 2 2 1
1 1 2 2
1 2输出 #1 1对于 100% 的数据1≤N,M≤51≤T≤101≤SX,FX≤n1≤SY,FY≤m。 解题思路
这题除了深搜还是深搜。
深搜一句话来总结一下就是
不撞南墙不回头
而在这题里“南墙”有三个
第一个是真墙迷宫的围墙
也就是俗话所说的越界。越界了你还不回头你是想去哪儿
第二个是山墙:障碍物T
如果T横在你面前你还是绕路吧
第三个是人造墙题目说了每个方格最多只能走一次
这是真没办法
所以深搜的返回条件就出来了——就是以上那三堵墙
我们每次可以从上下左右四个方向进行深搜一旦遇上南墙就返回如果走到了重点s。
记住了题目里说保证起点没有障碍并没有保证终点也没有啊 AC
#includeiostream
using namespace std;
int n, m, t, sx, sy, fx, fy;
int vis[10][10]; //标记
int mp[10][10]; //障碍物位置
int ans 0;
int xx[] { 1,0,-1,0 };
int yy[] { 0,-1,0,1 };
void dfs(int x, int y)
{if (x fx y fy){ans;return;}for (int i 0; i 4; i){int dx xx[i] x;int dy yy[i] y;if (dx 1 dx n dy 1 dy m vis[dx][dy]0 mp[dx][dy]0){vis[dx][dy] 1;dfs(dx, dy);vis[dx][dy] 0;}}
}
int main()
{cin n m t sx sy fx fy;while (t--){int a, b;cin a b;mp[a][b] 1;}vis[sx][sy] 1;dfs(sx, sy);cout ans endl;return 0;
}
P1274 魔术数字游戏 题目描述 填数字方格的游戏有很多种变化如下图所示的 4×4 方格中我们要选择从数字 1 到 16 来填满这十六个格子(Ai,j 其中 i1⋯4 j1⋯4)。为了让游戏更有挑战性我们要求下列六项中的每一项所指定的四个格子其数字累加的和必须为34 A1,1 A1,2 A1,3 A1,4 A2,1 A2,2 A2,3 A2,4 A3,1 A3,2 A3,3 A3,4 A4,1 A4,2 A4,3 A4,4 四个角落上的数字即 A1,1A1,4A4,1A4,434 。 每个角落上的 2×2 方格中的数字例如左上角 A1,1A1,2A2,1A2,234 。 最中间的 2×2方格中的数字即 A2,2A2,3A3,2A3,334 。 每条水平线上四个格子中的数字即 Ai,1Ai,2Ai,3Ai,434其中 i1⋯4 。 每条垂直线上四个格子中的数字即 jA2,jA3,jA4,j34其中 j1⋯4 。 两条对角线上四个格子中的数字例如左上角到右下角 1A2,2A3,3A4,434 。 右上角到左下角A1,4A2,3A3,2A4,134 。 特别的我们会指定把数字 1 先固定在某一格内。 输入格式 输入只有一行包含两个正数据 i 和 j 表示第 i 行和第 j 列的格子放数字 1。剩下的十五个格子请按照前述六项条件用数字 2 到 16 来填满。 输出格式 输出四行每行四个数相邻两数之间用一个空格隔开并且依序排好。排序的方式是先从第一行的数字开始比较每一行数字由最左边的数字开始比数字较小的解答必须先输出到文件中。 输入输出样例 输入 #1 1 1 输出 #1 1 4 13 16 14 15 2 3 8 5 12 9 11 10 7 6 说明/提示 样例的另一种方法是 1 4 13 16
14 15 2 3
12 9 8 5
7 6 11 10可以得到对于样例合理的填写方法有 216 种以上仅为其中的两种。 数据规模与约定 对于全部的测试点保证 1≤i,j≤4。 解题思路
因为题目信息给的太多4*4以及很多和要为34剪枝很好剪我就直接开挂对每个位置特判一下。比如说在(1,4)的时候检查第一行是否为34在(1,4)时检查第一列的和和对角线的和。然后在调试的时候我发现对于样例中(1,1)为1的情况 第一列会是这样
第一次:1 2 2 X 返回
第二次:1 2 3 X 返回
我觉得我是该做点什么来阻止这愚蠢的行为了。于是我在每个要求的区域和为34的第三个点特判先把前两个的和算出来当前要填的为i
imax(i,34-mx[1][2]-mx[1][1]-16);
if(i16) return ;意思应该很好懂这是(1,3)处的特判。然后我又发现这一列的和明明前三个就已经大于34了还在搜, ,真是看不下去了。于是对于每个搜到的点计算列之和还有行之和大于34直接return。看来效果好像不错的样子最慢的一个点0.2s。
AC
#includebits/stdc.h
using namespace std;
int n,m,a[11][11],f[101],g[11],d0;
void s(int x,int y) {if(x4y4) { for(int i1; i4; i) {for(int j1; j4; j) if(j4) couta[i][j]endl;else couta[i][j] ;}coutendl;}if(y4) { int z0;for(int i1; i4; i) za[x][i];if(z34) s(x1,1);return;}if(xnym) { s(x,y1);return;}for(int i2; i16; i) if(f[i]0) { if(x4) { int zi;for(int j1; j3; j) za[j][y];if(z!34) continue;}if(x4y4) {int zia[1][1]a[4][1]a[1][4];if(z!34) continue;}if(x4y1) { int zia[1][4]a[2][3]a[3][2];if(z!34) continue;}if(x4y4) { int zia[1][1]a[2][2]a[3][3];if(z!34) continue;}if(x3y3) { int zia[2][2]a[2][3]a[3][2];if(z!34) continue;}if(x2y2) { int zia[1][1]a[1][2]a[2][1];if(z!34) continue;}if(x2y4) { int zia[1][3]a[1][4]a[2][3];if(z!34) continue;}if(x4y2) { int zia[3][1]a[3][2]a[4][1];if(z!34) continue;}if(x4y4) { int zia[3][3]a[3][4]a[4][3];if(z!34) continue;}f[i]1;a[x][y]i;s(x,y1);f[i]0;}
}
int main() {cinnm;a[n][m]1;f[1]1;s(1,1);return 0;
}P2036 [COCI2008-2009 #2] PERKET 题目描述 Perket 是一种流行的美食。为了做好 Perket厨师必须谨慎选择食材以在保持传统风味的同时尽可能获得最全面的味道。你有 n 种可支配的配料。对于每一种配料我们知道它们各自的酸度 s 和苦度 b。当我们添加配料时总的酸度为每一种配料的酸度总乘积总的苦度为每一种配料的苦度的总和。 众所周知美食应该做到口感适中所以我们希望选取配料以使得酸度和苦度的绝对差最小。 另外我们必须添加至少一种配料因为没有任何食物以水为配料的。 输入格式 第一行一个整数 n表示可供选用的食材种类数。 接下来 n 行每行 22 个整数 si 和 bi表示第 i 种食材的酸度和苦度。 输出格式 一行一个整数表示可能的总酸度和总苦度的最小绝对差。 输入输出样例 输入 #1 1 3 10 输出 #1 7 输入 #2 2 3 8 5 8 输出 #2 1 输入 #3 4 1 7 2 6 3 8 4 9 输出 #3 1 说明/提示 数据规模与约定 对于 100%的数据有 1≤n≤10且将所有可用食材全部使用产生的总酸度和总苦度小于 1×109酸度和苦度不同时为 1 和 0。 说明 本题满分 7070 分。 题目译自 COCI2008-2009 CONTEST #2 PERKET译者 mnesia。 附件下载 contest2_tasks.pdf101.88KB 解题思路
外面用一个for循环来代表选取材料的数量将这个数量当做参数。
然后说一下坑点
这个题目要看清了我们知道它们各自的酸度S和甜度B。当我们添加配料时总的酸度为每一种配料的酸度总乘积总的甜度为每一种配料的甜度的总和。
然后我们必须添加至少一种配料。
最后有几个方法给初学者讲一下
1、ios::sync_with_stdio(false);这个方法还是要解释一下的 在某些题目中我们使用普通的cin和cout会超时所以我们每次只能打scanf和printf然后一堆的占位符巨麻烦为什么cin和cout比scanf和printf用的时间多 这是因为C中cin和cout要与stdio同步中间会有一个缓冲所以导致cincout语句输入输出缓慢这时就可以用这个语句取消cincout与stdio的同步说白了就是提速效率基本与scanf和printf一致。 2、abs绝对值 abs 是 absolute value 绝对值缩写。c 中的一个数学函数计算整型量的绝对值。要头文件 #include cmath 或 #include math.h 算例
int x16, y -6;
cout abs(x) endl;
cout abs(y) endl;
输出
16
6但是注意浮点数要使用fabs
3、min取最小值
例如
int a10,b8;
coutmin(a,b);则这段代码会输出8
AC
#include iostream
#include cstring
#include algorithm
using namespace std;
const int N 10;
int n;
long long ans 1e8;
int s[N], b[N];
void dfs(long long sd, long long kd, int str)
{int t abs(sd - kd);if(str ! 0 t ans) ans t;//不是第一次进入才比较ans和t因为第一次进入sd - kd为0则ans一直为0是错误的for(int i str; i n; i )if(sd 0 kd 0) dfs(s[i], b[i], i 1);//第一次需要特判一下因为存在sd 0乘任何数都是0了但kd是能加的else dfs(sd * s[i], kd b[i], i 1);//i 1是起始位置
}int main ()
{cin n;for(int i 0; i n; i ) cin s[i] b[i];dfs(0, 0, 0);cout ans;return 0;
}P2392 kkksc03考前临时抱佛脚 题目背景 kkksc03 的大学生活非常的颓废平时根本不学习。但是临近期末考试他必须要开始抱佛脚以求不挂科。 题目描述 这次期末考试kkksc03 需要考 44 科。因此要开始刷习题集每科都有一个习题集分别有 1,s2,s3,s4 道题目完成每道题目需要一些时间可能不等A1,A2,…,As1B1,B2,…,Bs23C1,C2,…,Cs3D1,D2,…,Ds4。 kkksc03 有一个能力他的左右两个大脑可以同时计算 2道不同的题目但是仅限于同一科。因此kkksc03 必须一科一科的复习。 由于 kkksc03 还急着去处理洛谷的 bug因此他希望尽快把事情做完所以他希望知道能够完成复习的最短时间。 输入格式 本题包含 5 行数据 第 1 行为四个正整数 s1,s2,s3,s4。 第 2行为 A1,A2,…,As1 共 s1 个数表示第一科习题集每道题目所消耗的时间。 第 3 行为 B2,…,Bs2 共 s2 个数。 第 4 行为 C1,C2,…,Cs3 共 s3 个数。 第 5 行为 D1,D2,…,Ds4 共 s4 个数意思均同上。 输出格式 输出一行,为复习完毕最短时间。 输入输出样例 输入 #1 1 2 1 3 5 4 3 6 2 4 3 输出 #1 20 说明/提示 1≤s1,s2,s3,s4≤20。 1≤A1,A2,…,As1,B1,B2,…,Bs2,C1,C2,…,Cs3,D1,D2,…,Ds4≤60。 解题思路
这道题可以运用dp方法求解建议与P1489 猫狗大战配合食用效果更佳。P1489 猫狗大战会在下一个题目讲解里出现敬请期待
这道题的目的就是将每一科目的所有数分成两部分使得两部分的差最小。
首先对于每一科目用布尔类型数组f[i][j]表示i个数中取得总和j是否可行可行则为true否则为false。
显然初始化使得f[0][0]1.
本题的输入数据可以用二维数组来存储那么状态转移方程可以表示为:f[j][k]f[j][k]||f[j-1][k-a[t][i]] 然后我们可以从sum[t]1开始枚举若f[j]i为true则答案为max(i,sum[t]-i)退出函数即可。
将以上过程重复四次累加所得答案输出andAC
AC
#includebits/stdc.h
using namespace std;
int a[5],i,j,k,sum,t,homework[21],dp[2501];
int main(){for(i1;i4;i)cina[i];for(i1;i4;i){sum0; for(j1;ja[i];j){cinhomework[j];sumhomework[j];}for(j1;ja[i];j)for(ksum/2;khomework[j];k--)dp[k]max(dp[k],dp[k-homework[j]]homework[j]);tsum-dp[sum/2];for(j1;jsum/2;j)dp[j]0;}coutt;return 0;
}结尾
希望大家多多关注
如果你能支持一下我我十分感谢
如果有人想在洛谷上做题可以点下方链接
https://www.luogu.com.cn/
如果你喜欢或想了解一下其他的算法可以看看以下这些
洛谷指南
洛谷使用指南_洛谷怎么看-CSDN博客
题目详解系列部分
【万题详解】DFS搜索专题合集上-CSDN博客
【万题详解】P1314 [NOIP2011 提高组] 聪明的质监员-CSDN博客
【万题详解】洛谷P1282 多米诺骨牌-CSDN博客
【万题详解】洛谷P1238 走迷宫-CSDN博客
【万题详解】洛谷P1135奇怪的电梯-CSDN博客
【万题详解】洛谷P1510 精卫填海-CSDN博客
【万题详解】洛谷P1252 马拉松接力赛-CSDN博客
【万题详解】洛谷P1359 租用游艇-CSDN博客
【百题详解】洛谷P8508 做不完的作业-CSDN博客
【万题详解1】洛谷P1230 智力大冲浪-CSDN博客
【全网首发】洛谷贪心题解合集2-CSDN博客
【全网首发】洛谷贪心题解集合-CSDN博客
洛谷二分题集3题-CSDN博客
游戏系列
C棋类小游戏2-CSDN博客
C自创棋类小游戏-CSDN博客
C史上最坑小游戏-CSDN博客 C自创小游戏-CSDN博客
C下雪-CSDN博客
C讲解系列算法
C第十五讲高精度算法-CSDN博客
C第十四讲动态规划初步-CSDN博客
C第十三讲BFS广度优先搜索-CSDN博客
C:第十二讲DFS深搜二_c匿名函数dfs-CSDN博客 C第十一讲DFS深搜-CSDN博客
C第十讲二分查找-CSDN博客
前缀和与差分
C第九讲前缀和与差分-CSDN博客
贪心
C第八讲贪心算法1-CSDN博客
C讲解系列基础入门
排序
C第七讲冒泡排序-CSDN博客
函数
C第6讲max和min函数_c min函数-CSDN博客
C第五讲函数初步-CSDN博客
for循环数组
C第四讲for循环及数组-CSDN博客
if语句else语句及运算
C第三讲C中的逻辑运算符及if else语句-CSDN博客
基础
C第二讲输入与输出-CSDN博客
C第一讲认识C编译器-CSDN博客
欢迎收看希望大家能三连
最后认识一下我是爱编程的喷火龙廖我们有缘再见