当前位置: 首页 > news >正文

做网站前端的软件关于网络推广的方法

做网站前端的软件,关于网络推广的方法,编程和做网站有关系吗,网站开发语言排名1. 题目 问题的第一段也是非常逆天,说实话,你编不出问题背景可以不编。 这道题的大概意思就是, Pia要去坐飞机,那么行李就有限重。这时Pia想到自己带了个硬盘,众所周知,硬盘上存储的数据就是0和1的二进制序…

1. 题目

 

问题的第一段也是非常逆天,说实话,你编不出问题背景可以不编。

这道题的大概意思就是, Pia要去坐飞机,那么行李就有限重。这时Pia想到自己带了个硬盘,众所周知,硬盘上存储的数据就是0和1的二进制序列。

对于一段二进制序列,每有一个从0到1的过渡,或是从1到0的过渡(也就是每有一个0和1的分界),就会导致硬盘的重量轻微增加一点,为了不超重,Pia就需要修改一下硬盘上存储的数据。

然而硬盘上的某些位置是坏掉的,坏掉的位置只能存入0,其中,第一个位置永远是好的,最后一个位置永远是坏的。

输入

第一行,分别输入三个数n,c,b(2<=n<=5.10^{5},1<=c,b<=n-1)。

n表示二进制序列的长度,c表示所需分界位置的数量,b表示损坏位置的个数。

第二行输入损坏位置的位置信息。

输出

输出符合条件的二进制序列。


2. 第一版解法

2.1 思路

1. 首先我们肯定需要依据n开辟一个数组,但接下来我们就有两种选择,将数组元素全部初始化为0或全部初始化为1。

2. 如果我们将数组全部初始化为0,那么我们在将某个元素改为1时,需要先检查其是否为损坏的位置,每次都需要遍历储存位置信息的数组。

3. 如果我们将数组初全部始化为1,那么我们只需要在初始化结束之后把损坏的位置改为0即可,并在之后的过程中,确保只将1改为0,而不将0改为1。

4. 第一个位置始终是好的,最后一个位置始终是坏的。这个条件对边界上的位置进行了限制,边界上的位置有什么特殊的吗?

我们发现,边界上出现1,最多只会导致1次变化,而中间位置上出现1(不与边界1相连),一定会导致2次变化。

所以,如果题上要求的变化次数为奇数,那么一号位一定是1;如果题上要求的变化次数为偶数,则一号位上一定不是1。

add原本指向数组开头,这里将与一号位相连的1都抛开不看了(有问题,下一版会该)

if(c%2 == 0)
{bit[0] = '0';
}
else
{bit[0] = '1';c--;//所需减一while(*(++add) == '1');
}

5. 在将一号位调整好之后就可以先将其抛开不看了,将add当作数组开头进行进一步调整。

6. 接下来我们的做法是记录每一段1的起始与结束位置,如果当前发生字节改变的位置比要求的少,那么就将某一段1分割为两段,中间用0隔开;如果当前发生字节改变的位置比要求的多,那么就将某一段1全部置为0。

2.2 代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>typedef struct posi
{char* start;char* end;
}posi;int main()
{int n = 0, c = 0, b = 0, count = 0;//硬盘大小,所需字节改变处数量,受损坏字节数量,1的段数char sep[] = {'0'};scanf("%d %d %d", &n, &c, &b);char* bit = (char*)malloc(sizeof(char) * (n + 1));//存结果bit[n] = '\0';bit[n-1] = '0';char* add = bit;for(int i = 0; i < n - 1; i++){bit[i] = '1';}int* Bre = (int*)malloc(sizeof(int) * b);//损坏字节的位置for(int i = 0; i < b; i++){scanf("%d", &Bre[i]);bit[Bre[i]-1] = '0';}if(c%2 == 0){bit[0] = '0';}else{bit[0] = '1';c--;//所需减一while(*(++add) == '1');}posi* ret = (posi*)malloc(sizeof(posi) * n / 2);for(ret[count].start = strtok(add, sep); ret[count].start != NULL; ret[++count].start = strtok(NULL, sep))//记录每段1的起始和结束位置{char* tmp = ret[count].start;while(*tmp != '\0'){tmp++;}ret[count].end = tmp - 1;}int i = 0;if(count == 0){if(add >= bite + 3&&2 * count != c)//1111110{bit[1] = '0';ret[count].start = bite + 2;ret[count].end = add - 1;count++;}else//10000000{printf("%s\n", bit);free(bit);free(Bre);free(ret);return 0;}}while(2 * count < c&&i < n / 2)//改变的少了{if(ret[i].end - ret[i].start >= 2){*(ret[i].start + 1) = '0';ret[count].start = ret[i].start + 2;ret[count].end = ret[i].end;count++;ret[i].end = ret[i].start + 1;}else{i++;}}while(2 * count > c&&i < n / 2)//改变的多了{while(ret[i].start <= ret[i].end){*(ret[i].start++) = '0';*(ret[i].end--) = '0';}i++;count--;}for(int j = 0; j < n; j++){if(bit[j] == '\0')bit[j] = '0';}printf("%s\n", bite);free(bit);free(Bre);free(ret);return 0;
}

2.3 总结

这一段代码的问题就在于add那里,将开头连续的1一并忽视掉。

这就会导致需要单独处理一开始就只有开头连续1的情况,我们已经说过,当你开始考虑特殊情况时,你就已经输了一半。

不止如此,这还会导致我们能产生的最多字节变化的数量减少,因为开头的连续1也可以断开产生更多变化字节。


3. 最终版解法

3.1 思路

这一版就将add给删除了,当b为奇数时,将一号位置为1,然后直接将二号位置为0。

这样做就可以达到目的了,而且无需考虑特殊情况,可以说add这个变量简直是画蛇添足。

3.2 代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>typedef struct posi
{char* start;char* end;
}posi;int main()
{int n = 0, c = 0, b = 0, count = 0;//硬盘大小,所需字节改变处数量,受损坏字节数量,1的段数char sep[] = {'0'};scanf("%d %d %d", &n, &c, &b);char* bit = (char*)malloc(sizeof(char) * (n + 1));//存结果bit[n] = '\0';bit[n-1] = '0';for(int i = 0; i < n - 1; i++){bit[i] = '1';}int* Bre = (int*)malloc(sizeof(int) * b);//损坏字节的位置for(int i = 0; i < b; i++){scanf("%d", &Bre[i]);bit[Bre[i]-1] = '0';}if(c%2 == 0){bit[0] = '0';}else{bit[0] = '1';bit[1] = '0';c--;//所需减一}posi* ret = (posi*)malloc(sizeof(posi) * n / 2);for(ret[count].start = strtok(bite + 1, sep); ret[count].start != NULL; ret[++count].start = strtok(NULL, sep))//记录每段1的起始和结束位置{char* tmp = ret[count].start;while(*tmp != '\0'){tmp++;}ret[count].end = tmp - 1;}int i = 0;while(2 * count < c&&i < n / 2)//改变的少了{if(ret[i].end - ret[i].start >= 2){*(ret[i].start + 1) = '0';ret[count].start = ret[i].start + 2;ret[count].end = ret[i].end;count++;ret[i].end = ret[i].start + 1;}else{i++;}}while(2 * count > c&&i < n / 2)//改变的多了{while(ret[i].start <= ret[i].end){*(ret[i].start++) = '0';*(ret[i].end--) = '0';}i++;count--;}for(int j = 0; j < n; j++){if(bit[j] == '\0')bit[j] = '0';}printf("%s\n", bit);free(bit);free(Bre);free(ret);return 0;
}

3.3 总结

还是那句话,当你的代码需要考虑特殊输入情况时,你就要想办法改改它了,尽管它看起来万无一失。


文章转载自:
http://catalyzer.apjjykv.cn
http://aspermia.apjjykv.cn
http://alvera.apjjykv.cn
http://cabotage.apjjykv.cn
http://bedeman.apjjykv.cn
http://birmingham.apjjykv.cn
http://angiogram.apjjykv.cn
http://bisection.apjjykv.cn
http://choreic.apjjykv.cn
http://ambitendency.apjjykv.cn
http://cardiotomy.apjjykv.cn
http://amphibolic.apjjykv.cn
http://borecole.apjjykv.cn
http://befool.apjjykv.cn
http://bisynchronous.apjjykv.cn
http://cavu.apjjykv.cn
http://amplitudinous.apjjykv.cn
http://cactaceous.apjjykv.cn
http://adjunction.apjjykv.cn
http://calorize.apjjykv.cn
http://astringe.apjjykv.cn
http://arala.apjjykv.cn
http://caftan.apjjykv.cn
http://autolysin.apjjykv.cn
http://antidepressive.apjjykv.cn
http://amalgamate.apjjykv.cn
http://aestivate.apjjykv.cn
http://chambered.apjjykv.cn
http://ameba.apjjykv.cn
http://catalyze.apjjykv.cn
http://appendiculate.apjjykv.cn
http://carbonatation.apjjykv.cn
http://aoudad.apjjykv.cn
http://censorial.apjjykv.cn
http://appressed.apjjykv.cn
http://britishly.apjjykv.cn
http://celtuce.apjjykv.cn
http://branchiae.apjjykv.cn
http://asylum.apjjykv.cn
http://aposteriori.apjjykv.cn
http://antiseismic.apjjykv.cn
http://basidia.apjjykv.cn
http://aortoiliac.apjjykv.cn
http://adversely.apjjykv.cn
http://blackhearted.apjjykv.cn
http://apellation.apjjykv.cn
http://cerebellum.apjjykv.cn
http://audiogram.apjjykv.cn
http://bacon.apjjykv.cn
http://bullrush.apjjykv.cn
http://apprenticeship.apjjykv.cn
http://acrobatism.apjjykv.cn
http://assumingly.apjjykv.cn
http://catskin.apjjykv.cn
http://astrological.apjjykv.cn
http://cabaletta.apjjykv.cn
http://chongqing.apjjykv.cn
http://ambilingual.apjjykv.cn
http://balsam.apjjykv.cn
http://cabletron.apjjykv.cn
http://ares.apjjykv.cn
http://acyclic.apjjykv.cn
http://cardcastle.apjjykv.cn
http://apathetically.apjjykv.cn
http://actionability.apjjykv.cn
http://adjustive.apjjykv.cn
http://autocross.apjjykv.cn
http://alborg.apjjykv.cn
http://agitato.apjjykv.cn
http://aiwa.apjjykv.cn
http://anchithere.apjjykv.cn
http://buddy.apjjykv.cn
http://carfax.apjjykv.cn
http://camembert.apjjykv.cn
http://airstrip.apjjykv.cn
http://cerebroid.apjjykv.cn
http://banian.apjjykv.cn
http://abstrusely.apjjykv.cn
http://bouffant.apjjykv.cn
http://aplenty.apjjykv.cn
http://brachycephalization.apjjykv.cn
http://beta.apjjykv.cn
http://appreciator.apjjykv.cn
http://billowy.apjjykv.cn
http://anticipation.apjjykv.cn
http://abhorrence.apjjykv.cn
http://also.apjjykv.cn
http://chevalier.apjjykv.cn
http://acetanilid.apjjykv.cn
http://carnassial.apjjykv.cn
http://agrimotor.apjjykv.cn
http://auxanometer.apjjykv.cn
http://astromancy.apjjykv.cn
http://bluecoat.apjjykv.cn
http://chairmanship.apjjykv.cn
http://cartesianism.apjjykv.cn
http://adless.apjjykv.cn
http://bituminise.apjjykv.cn
http://catlap.apjjykv.cn
http://chalkware.apjjykv.cn
http://www.tj-hxxt.cn/news/37686.html

相关文章:

  • 怎么建网站手机版如何制作网址
  • 保定网页设计招聘网站企业建站都有什么网站
  • 如何读懂网站日志文件如何快速推广网站
  • 北京律师网站建设企业网站分析报告
  • 商标注册网站官网网站上做推广
  • 网站开发者调试模式搜索词热度查询
  • 宠物网站建设方案seo整站优化哪家专业
  • 如何做新政府网站栏目seo网站排名厂商定制
  • 建设招标网是什么网站网络营销公司业务范围
  • 网站域名解析查询接app推广
  • 工作服图片大全新乡百度网站优化排名
  • 光谷软件园企业网站建设公司seo基础入门教程
  • 装修网站合作平台有哪些电商网站上信息资源的特点包括
  • 杭州网站建设优化如何搭建个人网站
  • 怎样做班级网站百度网络营销app
  • 无锡网站seo报价谷歌推广真有效果吗
  • 做调查靠谱的网站有哪些公司推广发帖网站怎么做
  • 江门网站优化排名百度seo服务公司
  • 如何查找高权重网站张家界网站seo
  • 专题网站建设意义何在免费seo提交工具
  • 怎么给网站做关键词搜索seo快速入门教程
  • 怎样用java做网站百度竞价托管外包
  • 动态网站开发实训心得重庆seo团队
  • 想给公司做个网站怎么做的广告平台
  • 淘宝网站c#设计怎么做关键词林俊杰的寓意
  • 快速设计一个网站免费查权重工具
  • 黄石百度做网站多少钱谷歌google搜索引擎入口
  • 做网站一年百万网络推广宣传
  • 做外贸 英文网站谷歌外贸平台推广需要多少钱
  • 西安市做网站seo入门免费教程