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

成品网站源码的优化技巧南京每月做社保明细在哪个网站查

成品网站源码的优化技巧,南京每月做社保明细在哪个网站查,app 外包开发公司,wordpress如何做站群思路详解在注释 1. T1:数字统计(count)给定两个整数n和x,计算在区间1到n的所有整数中(无前导零十进制表示),数字x一共出现的次数。签到题,暴力即可 代码不放了2. T2:次大值求和(sum)给定一个1到…

思路详解在注释 

1. T1:数字统计(count)

     给定两个整数n和x,计算在区间1到n的所有整数中(无前导零十进制表示),数字x一共出现的次数。
签到题,暴力即可  代码不放了

2. T2:次大值求和(sum)

    给定一个1到n的数字各出现一次的排列a[1]、a[2]、…、a[n],定义f(l,r)表示a[l]、a[l+1]、a[l+2]、…、a[r]中的次大值,你需要求出对于所有的1<=i<j<=n,f(i,j)的和。

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1e5+5;
int n,l[N],r[N];
ll ans;
struct sty{int x,id;
}a[N];
bool cmp(struct sty x,struct sty y){return x.x<y.x;
}
/*
考虑 30pts 的作法我们可以直接枚举每个区间的左右端点 l r,
然后用 O(n) 的时间求出次大值并累加,时间复杂度 O(n^3)。
然后我们会发现一个区间的次大值可以由上一个区间转移过来,
故可以将时间复杂度优化为 O(n^2),期望得分 70pts。
可以观察到之前我们所有的算法思想无外乎是以统计区间为主的。
这里我们转化一下思想,我们其实可以枚举每一个数作为次大值时是哪些区间。
当一个数作为次大值时。设她右边第一个比她大的数与她的距离为 d1 ,
设左边第一个比她大的数与她的距离为 d2 。
则所有以她为次大值的区间个数就是 d1(d2-1)+d2(d1-1)->乘法原理。
内心:看不懂一点公式…………………………
但是找到某个数左边的比她大的数和右边比她大的数又要花费我们 O(n) 的时间,
考虑如何优化:其实可以用单调队列等多种数据结构优化,但我这边用的是双向链表:
我们先排序,然后从小到大枚举,每枚举完一个数就将这个数删掉,
容易发现这时每个数左边第一个数便是原数列中第一个她大的,右边同理。
时间复杂度 O(nolgn+n) 期望得分 100pts
*/ 
int main(){scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d",&a[i].x); //第i个数对应的值 a[i].id=i; //第几个数 }sort(a+1,a+n+1,cmp); //按照值从小到大进行排序 for(int i=1;i<=n;i++) {l[i]=i-1,r[i]=i+1; //初始化i的左边和i右边的值 } r[n+1]=n+1;//防止在查询右操作(就是右边的右边)时,k2=0,但左操作不会 
//	for(int i=0;i<=n+1;i++){
//		printf("%d %d\n",l[i],r[i]);
//	} for(int i=1;i<=n;i++){int x=a[i].id; int j1=l[x];//当前的左边 int j2=l[j1];//当前的左边的左边int k1=r[x];//当前的右边int k2=r[k1];//当前的右边的右边      l[r[x]]=l[x];r[l[x]]=r[x];//删除当前节点 
//      for(int i=0;i<=n+1;i++){
//		printf("\n%d %d\n",l[i],r[i]);
//	} ans=ans+(ll)i*((j1-j2)*(k1-x)+(k2-k1)*(x-j1));/*为什么要乘i,因为当你在第i小时,只可能有i种选择例:4 2 3 1 ----> 1 2 3 4所在区间次大值是1:1 2所在区间次大值是2: 2 3 / 1 2 3所在区间次大值是3: 3 4 / 2 3 4 / 1 2 3 4所在区间次大值是4:无,因为他最大,虽然看上去乘了,但由于 (j1-j2)*(k1-x)+(k2-k1)*(x-j1)一定为 0,等于没有乘 d1(d2-1)+d2(d1-1):举个例子:2(l2) 0 3(l1) 1(x) 0 2(r1) 3(r2)l1-l2意思是i左侧当i作为次大值是有几个区间,r1-x意思是既然在左侧i已经为次大值了,那么在右侧一直到下一个比它大的值之前的所有区间即为所求(因为从大到小,下一个i连的点即为比它大的点)加号右侧相反,同理*/}printf("%lld\n",ans);return 0;
}


3. T3:优先队列题

     给定n个整数a[i]和一个整数m,对于所有1<=i<=n和1<=j<=n,求出a[i]+a[j],然后将所有求得的n^2个a[i]+a[j]的数值从大到小排序,你需要求出排序后前m个数的和。

思路:把ai+aj的和放进队列,当数量大于m后,剔除最小的,而ai+aj<q.top()时,说明接下来的ai+aj都小于q.top(),直接退出即可,这样使时间复杂度降低

     代码:

#include <bits/stdc++.h>
using namespace std;
priority_queue<int,vector<int>,greater<int> >q;
int a[100001];
bool cmp(int a,int b) {return a>b;
} 
int main(){int n,m;long long ans=0;cin>>n>>m;for(int i=1;i<=n;i++)scanf("%d",&a[i]);sort(a+1,a+1+n,cmp);int Size=0;for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){q.push(a[i]+a[j]);Size++;if(Size>m){q.pop();if(a[i]+a[j]<q.top()) break;}}} while(!q.empty()) ans+=q.top(),q.pop();cout<<ans;return 0;
}


4. T4 backpack

    给定n个物品和一个整数s,第i个物品的体积是a[i],定义f(l,r)表示在第l个物品到第r个物品中选出若干个物品的方案数,使得这些物品的体积之和为s。
你需要求出对于所有1<=l<=r<=n,f(l,r)的和。由于答案可能很大,你只需要输出答案对998244353取模的结果。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int mod=998244353,N=3e3+10;
int n,a[N],s,f[N][N];
ll ans=0;
/*这代码的恶心点在于它的i指的不是平时的1~i中有几种可能性
而是1~i、2~i、……、i~i共i组可能性的和 
而且,它还代表了1~i+1、2~i+1……1~i+2、2~i+2…………
中只使用这i组时的所有可能性 */
int main(){cin>>n>>s;for(int i=1;i<=n;i++) cin>>a[i];for(int i=1;i<=n;i++){for(int j=1;j<=3000;j++){//循环背包容量//但是我还是认为j到s就行了
//		如果容量刚好能放下这个物品时,光放这一个的可能性
//		一开始我也没看懂,但是悟了之后其实就很明显了:
//		加i是因为f[i][j]中共有i组,每组多一种可能性,便是i种if(j==a[i]) f[i][j]=(f[i][j]+i)%mod;//等于if(j==a[i]) Add(f[i][j],i); //没放的可能性 ,dp板子 f[i][j]=(f[i][j]+f[i-1][j])%mod;//等于Add(f[i][j],f[i-1][j]);//只要能放进去了总可能性中就一定会有没有a[i]时的方案数,所以加上if(j>=a[i]) {f[i][j]=(f[i][j]+f[i-1][j-a[i]])%mod; }//如果背包放满了,记录答案//*n-i+1是把所有含这i组且只用这i组中的可能性一口气加上 //因为直接一口气加上了,所以-f[i-1][j]防止重复加 if(j==s) {ans=(ans+(1ll*(f[i][j]+mod-f[i-1][j])%mod*(n-i+1)%mod)%mod)%mod;}//1ll意思是运算中可能会超int,所以运算中先开成long long,运算结束后//再赋值回int,防止爆掉(实际看代码时当不存在就好了) }}cout<<ans<<endl;return 0;
}

文章转载自:

http://7pTRZhGo.wzknt.cn
http://h9rHt2Yb.wzknt.cn
http://nBF21Us4.wzknt.cn
http://FnOVkE4E.wzknt.cn
http://R9Kd1qtM.wzknt.cn
http://lIIzbrLj.wzknt.cn
http://XcFZ8B5Z.wzknt.cn
http://01sctVsk.wzknt.cn
http://dXxx6lKj.wzknt.cn
http://LXIcq1MC.wzknt.cn
http://JLUY6BRO.wzknt.cn
http://x8pqmZMl.wzknt.cn
http://YwQcCZaK.wzknt.cn
http://iKkqYnht.wzknt.cn
http://PGmmAeYX.wzknt.cn
http://Hj2zNNtu.wzknt.cn
http://o3SfjAbE.wzknt.cn
http://tOEZ8ZqC.wzknt.cn
http://UVDuWeYG.wzknt.cn
http://bIj7KvRP.wzknt.cn
http://AzirvW7O.wzknt.cn
http://K6B2fNJi.wzknt.cn
http://uXAPR9pF.wzknt.cn
http://Smhq6KKx.wzknt.cn
http://fIZ8psOK.wzknt.cn
http://39ytJwMk.wzknt.cn
http://c9qVs52j.wzknt.cn
http://5pDzCJ9s.wzknt.cn
http://qYrGQtP8.wzknt.cn
http://f0VqoaQT.wzknt.cn
http://www.dtcms.com/wzjs/726239.html

相关文章:

  • 为什么国外网站有时打不开河北建设银行石家庄分行招聘网站
  • 北京公司网站怎么制作潍坊人才招聘网
  • 湖南省网站免费的舆情网站下载
  • 网站推广策划方案3000字公司网站做百度推广需要交费吗
  • 良乡网站建设百度做网站推广电话
  • 做网站商城需要多少钱怎么自己做网站卖东西
  • 企业官方网站开发外包wordpress主题 制作教程
  • 网站后端用什么软件做建设银行国际互联网网站
  • 蓝杉互动网站建设做宣传图片的软件
  • 网站建设服务目标网页版qq邮箱登录
  • 山西省消防总队建设工程备案网站wordpress 文章搜集
  • 网站快速收录软件如何建设视频网站
  • 做网站搞笑口号中跃建设集团网站吗
  • 官方网站哪家做的最好去掉wordpress 上一篇
  • dz论坛如何做网站地图旅游景点网站设计方案
  • 深圳服饰网站建设优质聊城做网站费用
  • 50万县城做地方网站网站文章推广
  • 免费做电子目录的网站cms搭建网站
  • 谈谈网站建设会有哪些问题网站模板html整站
  • wap盛唐建站wordpress入门视频教程
  • 公司网站备案网站名称有什么用设计网站大全软件
  • 网站设计过时网页制造工具
  • 嘉兴企业网站建设郑州网络推广方法
  • 做的网站没有注册学网站建设学校
  • 如何进行营销型企业网站的优化个体户网站备案
  • 郑州网站外包公司建设自己网站需要多钱
  • 网站设计策划案绥化市新闻最新消息
  • 深圳龙岗设计兰州新站点seo代理
  • 门户网站等保二级建设方案办公空间设计定位
  • 网站 源文件百度热搜电视剧