首页
关于
Search
1
Fastadmin 美化后台样式
311,338 阅读
2
关于破解移动宽带光猫 型号: GS3101 超级管理员密码
27,128 阅读
3
Wallpaper完美壁纸修复天气bug(无需申请API)
21,015 阅读
4
给Thinkphp3用上composer
20,160 阅读
5
PECL无法安装时手动编译安装PHP扩展
19,842 阅读
Linux
Mysql
PHP
Nginx
归档
Android
Python
IOS
浴室沉思
C++
CCF CSP认证
Windows
C#
前端
登录
Search
标签搜索
php
git
Windows
wkhtmltopdf
短信
defense
API
Google Photos
python
wkhtmltoimage
网页快照
linux
ssr
https
mail
sms
小程序
封装
ComoBox
拼多多
Guooo
累计撰写
126
篇文章
累计收到
93
条评论
首页
栏目
Linux
Mysql
PHP
Nginx
归档
Android
Python
IOS
浴室沉思
C++
CCF CSP认证
Windows
C#
前端
页面
关于
搜索到
126
篇与
的结果
2017-09-15
【CCF】模板生成系统
问题描述 有一类节日的日期并不是固定的,而是以“a月的第b个星期c”的形式定下来的,比如说母亲节就定为每年的五月的第二个星期日。 现在,给你a,b,c和y1, y2(1850 ≤ y1, y2 ≤ 2050),希望你输出从公元y1年到公元y2年间的每年的a月的第b个星期c的日期。 提示:关于闰年的规则:年份是400的整数倍时是闰年,否则年份是4的倍数并且不是100的倍数时是闰年,其他年份都不是闰年。例如1900年就不是闰年,而2000年是闰年。 为了方便你推算,已知1850年1月1日是星期二。输入格式 输入包含恰好一行,有五个整数a, b, c, y1, y2。其中c=1, 2, ……, 6, 7分别表示星期一、二、……、六、日。输出格式 对于y1和y2之间的每一个年份,包括y1和y2,按照年份从小到大的顺序输出一行。 如果该年的a月第b个星期c确实存在,则以"yyyy/mm/dd"的格式输出,即输出四位数的年份,两位数的月份,两位数的日期,中间用斜杠“/”分隔,位数不足时前补零。 如果该年的a月第b个星期c并不存在,则输出"none"(不包含双引号)。样例输入5 2 7 2014 2015样例输出2014/05/112015/05/10评测用例规模与约定 所有评测用例都满足:1 ≤ a ≤ 12,1 ≤ b ≤ 5,1 ≤ c ≤ 7,1850 ≤ y1, y2 ≤ 2050。提交代码之后得到90分,原因是运行超时。可能是处理数据大的时候运行时间长了#include <bits/stdc++.h> using namespace std; vector<string> tem; //模板保存 map<string,string> dict; //键值对字典 int m,n; string s; string key,val; //字符串替换处理 void strhandle(string str){ int begin,end,len; string k,v; while(str.find("{{ ") != string::npos){ begin = str.find("{{ ") + 3;//由于 {{ 占用了三个字符 len = str.find(" }}"); len -= begin; //总长度等于末尾位置减去起始位置 k = str.substr(begin,len); //用于查找的键 if(dict.find(k) == dict.end()) v = ""; else v = dict.find(k)->second; //真正的字典值 str.replace(begin-3,len+6,v); //替换字符串 } cout<<str<<endl; return; } int main(){ //freopen("input.txt","r",stdin); //!!!!!!!!!!!!!!!!!!! cin>>m>>n; getchar(); //要给出一个空行 for(int i=1;i<=m;i++) { getline(cin,s); //读取到s中 tem.push_back(s); //放到tem中 //cout<<i<<' '<<s; } //获取键值对字典 for(int i=1;i<=n;i++){ getline(cin,s); int pos = s.find_first_of(" "); //找到空格的位置 // 其实substr底层应该是for(i=0;i<pos;i++) key = s.substr(0,pos); //区间 [0,pos) 不包括pos位置的字符 val = s.substr(pos+1,s.length()); //不包括pos位置的字符到结束 while (val.find("\"") != string::npos) val.replace(val.find("\""),1,""); //处理双引号 //键值对插入map dict.insert(make_pair(key,val)); } //开始处理模板替换 for(int i=0;i<tem.size();i++){ //一行一行处理 s = tem[i]; strhandle(s); } return 0; }
2017年09月15日
2,766 阅读
0 评论
0 点赞
2017-09-14
SSH登录远程卡顿、慢的解决办法
发现有一个SSH连接的问题,每次连接远程服务器的时候,都会出现验证速度慢,要经过很长时间的没响应过程。研究了一下,找到这么几种解决办法:修改客户端配置文件ssh_conf(注意,不是sshd_conf)vi /etc/ssh/ssh_conf# 找到 # GSSAPIAuthentication yes # 改为 GSSAPIAuthentication no实际上,这个GSSAPI认证,是在用户登录的时候,客户端要对服务器端的IP地址进行反向解析,如果服务器的IP地址没有配置PTR记录,那么解析不通过,就会被卡住~等待很长一段时间之后才能连接。关闭DNS反向解析在linux中,默认就是开启了SSH的反向DNS解析,这个也会消耗大量时间。vim /etc/ssh/sshd_configUseDNS=no修改nsswitch.conf文件如果SERVER需要通过域名访问其他服务器,则需要保留此行。hosts: files dns 这一行含义是对于访问的主机进行域名解析的顺序,是先访问file,也就是/etc/hosts文件,如果hosts中没有记录域名,则访问dns,进行域名解析,如果dns也无法访问,就会等待访问超时后返回,因此等待时间比较长。vim /etc/nsswitch.conf# 找到 # hosts: files dns XXX # 改成 hosts:files将GSSAPIAuthentication yes 设置为novim /etc/ssh/sshd_configGSSAPIAuthentication no最后记得重启下ssh服务systemctl restart sshd
2017年09月14日
6,370 阅读
0 评论
1 点赞
2017-09-13
【敲黑板】Windows重置网络
无论你遇到各种你觉得有问题的问题我是指win系统的网络方面的问题尤其是那些它莫名其妙出现的问题如果没有想到什么好的办法解决的话跟我做用管理员身份打开命令行CMD输入NETSH WINSOCK RESET CATALOG等到出现提示你重置winsock目录成功,你就重启电脑没了
2017年09月13日
2,126 阅读
0 评论
0 点赞
2017-09-12
在Win10家庭版中启用 组策略
在很多情况下,组策略对维护或者优化windows系统来说都十分重要。但是据我所知,大多数(联想)笔记本/PC 默认出厂安装的都是windows家庭版,(甚至Ubuntu)。正常人在使用的时候一般都不会想到查看或者更换系统版本。但是一旦电脑出了问题,(必须)需要用到组策略,那么除了重装系统外可能一时间找不到什么更好的办法,因为家庭版默认是没有组策略的。但有时候重装系统又可能让自己原本的正版Windows变成KMS版,虽然可能并没有什么影响。可是如果windows家庭版也能用组策略呢?曾在Windows 7中使用Windows Anytime Upgrade升级的人都知道,即使是最入门级版本的Windows也可以离线升级高级版本。实际上入门版本的Windows,也包含最高版本的功能文件。我们只需要把它们找出来并启用就行了。首先我们打开记事本,并输入以下内容(注意空格):@echo off pushd "%~dp0" dir /b C:\Windows\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientExtensions-Package~3*.mum >List.txt dir /b C:\Windows\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientTools-Package~3*.mum >>List.txt for /f %%i in ('findstr /i . List.txt 2^>nul') do dism /online /norestart /add-package:"C:\Windows\servicing\Packages\%%i" pause然后选择文件另存为,文件类型选择所有文件,名称随意,扩展名为.cmd把它保存下来。接下来右键以管理员身份运行这个文件,再使用win+R输入gpedit.msc查看一下,组策略是不是有了。参考链接:https://www.ithome.com/html/win10/324926.htm
2017年09月12日
1,380 阅读
0 评论
0 点赞
2017-09-11
【CCF】最优配餐
问题描述 栋栋最近开了一家餐饮连锁店,提供外卖服务。随着连锁店越来越多,怎么合理的给客户送餐成为了一个急需解决的问题。 栋栋的连锁店所在的区域可以看成是一个n×n的方格图(如下图所示),方格的格点上的位置上可能包含栋栋的分店(绿色标注)或者客户(蓝色标注),有一些格点是不能经过的(红色标注)。 方格图中的线表示可以行走的道路,相邻两个格点的距离为1。栋栋要送餐必须走可以行走的道路,而且不能经过红色标注的点。 送餐的主要成本体现在路上所花的时间,每一份餐每走一个单位的距离需要花费1块钱。每个客户的需求都可以由栋栋的任意分店配送,每个分店没有配送总量的限制。 现在你得到了栋栋的客户的需求,请问在最优的送餐方式下,送这些餐需要花费多大的成本。输入格式 输入的第一行包含四个整数n, m, k, d,分别表示方格图的大小、栋栋的分店数量、客户的数量,以及不能经过的点的数量。 接下来m行,每行两个整数xi, yi,表示栋栋的一个分店在方格图中的横坐标和纵坐标。 接下来k行,每行三个整数xi, yi, ci,分别表示每个客户在方格图中的横坐标、纵坐标和订餐的量。(注意,可能有多个客户在方格图中的同一个位置) 接下来d行,每行两个整数,分别表示每个不能经过的点的横坐标和纵坐标。输出格式 输出一个整数,表示最优送餐方式下所需要花费的成本。样例输入10 2 3 31 18 81 5 12 3 36 7 21 22 26 8样例输出29评测用例规模与约定 前30%的评测用例满足:1<=n <=20。 前60%的评测用例满足:1<=n<=100。 所有评测用例都满足:1<=n<=1000,1<=m, k, d<=n^2。可能有多个客户在同一个格点上。每个客户的订餐量不超过1000,每个客户所需要的餐都能被送到。这个问题直接使用了bfs 广度优先搜索就可以,用visited[][] 标记访问过的坐标,把不能访问的坐标也标记成访问过的坐标就可以了。统计一下订餐坐标的总数量,以判断结束与否。当初提交时没有考虑n的范围,最终结果(100万)超出了int的范围,导致当初只有80分具体原因类似于这个提交为100分的代码如下,注释很详细:#include <bits/stdc++.h> using namespace std; const int N = 1005; //最大大小 const int DIRECTSIZE = 4; //上下左右四个方向 int order[N][N]; //某坐标位置的订单数 int visited[N][N] ; //某坐标是否已经访问过 struct direct{ //定义一个关于方向的结构体 int drow,dcol; }direct[DIRECTSIZE] = {{-1,0},{1,0},{0,-1},{0,1}}; struct node{ //用于记录每个坐标走了多少步 int row,col,step; node(){} node(int r,int c,int s){row = r,col = c,step = s;} }; queue<node> q; // 定义一个node队列 int coord = 0; //总坐标数量 long long ans = 0; //这里需要使用long long,因为有些系统上 long int 和 int 是相同的 //广度优先搜索 void bfs(int n){ //v用来保存所有数据,包括走到某点坐标时的步数 //front用以临时保存 node front,v; //如果队列中有元素,就一直执行 while(!q.empty()){ front = q.front(); //取出q中第一个元素 q.pop(); //删除q中第一个元素 //搜索该点的四个方位 for(int i=0;i<DIRECTSIZE;i++){ //注意这里下标是从0开始的 v.row = direct[i].drow + front.row; v.col = direct[i].dcol + front.col; v.step = front.step + 1; //坐标位置加一步 //判断是否超出方格图大小 if(v.row < 1 || v.row > n || v.col < 1 || v.col > n) continue; //跳出本次循环 //是否已经搜索过 if(visited[v.row][v.col]) continue; //如果有订单 if(order[v.row][v.col] != 0){ //因为 每一个订单每走一个单位的距离需要花费1块钱 ans += v.step * order[v.row][v.col]; //有可能坐标点不止一个订单 visited[v.row][v.col] = 1; //可以不加 coord--; //坐标数减少 if(coord == 0) return; //结束 } //把搜索过的地点标记 visited[v.row][v.col] = 1; //把没有走到头的v放进队列 q.push(v); } } } int main(){ //freopen("input.txt","r",stdin); //直接本地读取数据 int n,m,k,d,x,y,c; //用以接收的变量 //初始化变量 memset(order,0,sizeof(order)); memset(visited,0,sizeof(visited)); //输入 cin>>n>>m>>k>>d; for(int i=1;i<=m;i++){//输入分店坐标,分店坐标不能搜索 ,所以设置为true cin>>x>>y; q.push(node(x,y,0)); //把分店坐标压入队列中,以此为基础 //queue<node> q; visited[x][y] = 1; } for(int i=1;i<=k;i++) { cin>>x>>y; //订单坐标 cin>>c; //该坐标订单数量 if(order[x][y] == 0) //如果该坐标没有搜索过 coord++; //坐标数加1 order[x][y] += c; //把订单数赋给坐标位置 } for(int i=1;i<=d;i++) { cin>>x>>y; visited[x][y] = 1; //把不能通过的也标记成已搜索 } //开启广度优先搜索 bfs(n); cout<<ans<<endl; return 0; }参考100分的方法:http://blog.csdn.net/tigerisland45/article/details/54945267
2017年09月11日
2,808 阅读
0 评论
0 点赞
2017-09-10
【CCF】最大的矩形
问题描述 在横轴上放了n个相邻的矩形,每个矩形的宽度是1,而第i(1 ≤ i ≤ n)个矩形的高度是hi。这n个矩形构成了一个直方图。例如,下图中六个矩形的高度就分别是3, 1, 6, 5, 2, 3。 请找出能放在给定直方图里面积最大的矩形,它的边要与坐标轴平行。对于上面给出的例子,最大矩形如下图所示的阴影部分,面积是10。输入格式 第一行包含一个整数n,即矩形的数量(1 ≤ n ≤ 1000)。 第二行包含n 个整数h1, h2, … , hn,相邻的数之间由空格分隔。(1 ≤ hi ≤ 10000)。hi是第i个矩形的高度。输出格式 输出一行,包含一个整数,即给定直方图内的最大矩形的面积。样例输入63 1 6 5 2 3样例输出10分析遇到这个题目第一反应就是暴力破解,看到数据范围并不是很大[1,10000],所以就用暴力破解解决了。另外一种解法是使用STL的包装类vector,可以实现动态数据存储,不受限于数据的多少,不过我没有实现,另一种解法详细步骤在这里暴力破解代码#include <bits/stdc++.h> using namespace std; int main(){ int n,i,j; cin>>n; int height,max=0,area; int a[1001]; for(i=1;i<=n;i++) cin>>a[i]; //暴力破解 for(i=1;i<=n;i++){ height = a[i]; for(j=i;j>=1;j--){ if(a[j] < height) height=a[j]; area = height*(i-j+1); if(max < area) max=area; } } /* //暴力破解正向逆向都可以 for(int i=1; i<=n; i++) { height = a[i]; for(int j=i; j<=n; j++) { if(a[j] < height) height = a[j]; area = (j - i + 1) * height; if(area > max) max = area; } } */ cout<<max; return 0; }
2017年09月10日
2,838 阅读
0 评论
0 点赞
2017-09-10
C++中字符串转数字
CCF认证里有一题需要用到字符串转数字,于是我定义了一个string类型的变量,然后当做Char型数组用。但是在转换到整型数字时,发现了一点点问题。先看代码#include <bits/stdc++.h> using namespace std; int main(){ string s; cin>>s; int sum=0,j=1; //注意这个循环里 for(int i=0; i<(int)s.length()-1; i++){ sum += (s[i] - '0') * j++; //这里为什么不是sum += s[i] * j++,而是需要先减去'0'。否则结果偏大 } cout<<sum<<endl; return 0; }在这里字符(串)转int整型时需要先减去'0',而且int整型转字符(串)时同样也需要在后面加上一个'0',如下 char c; c = 10 % 3; c = c + '0'; //注释这一段之后输出的为 ASCII表中 1 所代表的特殊符号 cout<<c<<endl; //此时输出结果为 1看完这张表我就突然发现问题了当把字符转直接转换成十进制数字时,比如把字符'1'转换成1,此时字符'1'所对应的十进制数字其实是十进制当中的49,因此直接把字符当整型计算的话 得到的结果自然会偏大了。
2017年09月10日
2,803 阅读
0 评论
0 点赞
2017-09-10
C++中单引号''和双引号""的区别
"a"和'a'的区别,前者是字符串,后者是字符。实际上,"a"在内存中一般占2个字节(不是说字符串长度,是占用内存。注意说是一般占2字节,有特殊情况),"a\0",以'\0'结尾。而'a'是一个单字符。 当然字符串可以是"abcde"这样的,'abcde'这样就是错误的。。。另外在C++中sizeof('a')=1,它是占一个字节,sizeof("a")=2,它后面还有一个\0结束符;而在C语言中,sizeof('a')=4(字符在C语言中是用int型数据存储的)。
2017年09月10日
2,166 阅读
0 评论
0 点赞
1
...
8
9
10
...
16