08/12:
前几题都是codeforces #Pi 的div2的题。不过那次打的太差,只看了两题。。
链接:http://codeforces.com/contest/567
A:
题意:找出一个公比为k长度为3的等比数列,由 bb,b∗kb*k, b∗k2b*k^2组成。 找出最多存在几个这样的数列,数都可以重复使用。但是保证这个数列一定是按照增的顺序出现的,出现的顺序不是增的也不行的。
例如 2 4 6 可以 4 2 6 不行。
思路:
将每个数都假定为数列中中间的那一个数bk。因为假定为第一个的话不好找到后面的,每次查找如果直接遍历肯定超时,假定为后一个的话不好保证他的顺序一定是增的。
假定当前数 i 为中间那个数以后,判断是否能整除k 如果不能,就不可能是。如果可以就将 i/k 在这之前出现的次数乘上 i*k在这后面出现的次数。
对于出现的次数可以在输入的时候记下总共出现的次数。
在遍历的时候记下在之前出现的次数,这样的话在后面出现的次数就可以用总共出现的次数减掉前面出现的。
这样要特判:如果i = i/k = i*k的话要减掉当前这个,不要多加。所以就是i = 0 或者 k = 1的时候。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <map>
using namespace std;
#define M 1000009
typedef long long ll;
ll a[M];
ll n,k;
int main()
{while(scanf("%I64d %I64d",&n,&k)==2){ll ans = 0;map<ll,ll> pre,total;for(int i = 0;i < n;i++){scanf("%I64d",&a[i]);total[a[i]]++;}pre[a[0]]++;for(int i = 1;i < n-1;i++){ll t = a[i];int temp = 0;if(k == 1 || t == 0)  //特判{ans += pre[t]*(total[t]-pre[t]-1);}else if(t%k == 0)ans += pre[t/k]*(total[t*k]-pre[t*k]);pre[t]++;}printf("%I64d\n",ans);}return 0;
}/*
3 110000
1 110000 -7849018885 2
0 0 0 0 0
*/

也可以写成这样更优雅一点,不用特判,就是在读入的时候记下这个位置的前面的有几个

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <map>
using namespace std;
#define M 1000009
typedef long long ll;
ll a[M];
ll n,k;
int main()
{while(scanf("%I64d %I64d",&n,&k)==2){ll ans = 0;map<ll,ll> pre,total,fk;for(int i = 0;i < n;i++){scanf("%I64d",&a[i]);if(a[i] % k == 0){pre[i] = total[a[i]/k];}total[a[i]]++;  //此时再加保证自身也包含在前面中fk[i] = total[a[i]*k]; // 前面出现过的三阶数的个数。}for(int i = 1;i < n-1;i++){ll t = a[i];int temp = 0;ans += pre[i]*(total[t*k]-fk[i]);}printf("%I64d\n",ans);}return 0;
}

B:
题意:判断图书馆至少能进容纳几个人。在这个系统启动之前可能就有人在图书馆里面了,系统关闭的时候也可能有人还在。
用一个变量存正常登陆的,另一个存答案如果是之前就进来的(就是是-号但之前没登陆过),那么就直接答案+1,如果是-号,但登陆过就把正常登陆的–。如果+号就++,比较这两个哪个大,最后就是答案。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define M 1000009
int n;
int vis[M];
int main()
{while(scanf("%d",&n)==1){getchar();int ans = 0;int temp = 0;for(int i = 0;i < n;i++){char c = getchar();int a;scanf("%d",&a);if(c == '-'){if(!vis[a]){ans++;}else temp--;}if(c == '+'){temp++;vis[a] = 1;}ans = max(ans,temp);getchar();}printf("%d\n",ans);}return 0;
}

D:
题意:找出几步之后,他一定是在骗人。
思路:先确定整个空间最多能放几艘船,然后用一个集合,插入的要攻击的点之前先找到比他大的,和比他小的。然后插进去。算出能放的船数减少了多少,如果当前能放的船数比所要放的小,就是在骗人了。
sum=sum−(t1−t2)/(a+1)+(t1−temp)/(a+1)+(temp−t2)/(a+1);sum = sum - (t1-t2)/(a+1) + (t1-temp)/(a+1) + (temp-t2)/(a+1);

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <set>
using namespace std;
#define M 1000009
int vis[M];
int n,k,a;
int m;
int main()
{while(scanf("%d %d %d",&n,&k,&a)==3){set<int> s;scanf("%d",&m);int ok = 0;s.insert(0);s.insert(n+1);int ans = -1;int sum = (n+1)/(a+1); //因为不能相邻for(int i = 1;i <= m;i++){int temp;scanf("%d",&temp);if(ok) continue;set<int>::iterator it;  //注意迭代器的使用。。好久没用都有点不懂了。。it = s.upper_bound(temp);int t1 = *it;it--;int t2 = *it;s.insert(temp);sum = sum - (t1-t2)/(a+1) + (t1-temp)/(a+1) + (temp-t2)/(a+1);  //算出现在能放的船数。if(sum < k){ans = i;ok = 1;}}printf("%d\n",ans);}return 0;
}/*
6 1 5
1
1
*/

E:水,就是要注意给定的就是上升的数列了,不要麻烦了做。。。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define M 1000009
int a[M];
typedef struct
{int mi;int ma;
}state;
state ans[M];
int n;
int main()
{while(scanf("%d",&n)==1){for(int i = 0;i < n;i++)scanf("%d",&a[i]);ans[0].ma = a[n-1]-a[0];ans[0].mi = a[1]-a[0];for(int i = 1;i < n-1;i++){ans[i].ma = max(a[n-1]-a[i],a[i]-a[0]);ans[i].mi = min(a[i+1]-a[i],a[i]-a[i-1]);}ans[n-1].ma = a[n-1]-a[0];ans[n-1].mi = a[n-1]-a[n-2];for(int i = 0;i < n;i++)printf("%d %d\n",ans[i].mi,ans[i].ma);}return 0;
}

F:
题意:给定一个A。找出满足整个式子的最大的n。
思路:
注意这题不能用二分,虽然很像二分,但是把那个方程的表打出来会发现这个不是一个单调的。
首先暴力打出素数表跟回文表,记录下对于不大于任意n的素数和回文数有几个。(要注意的是回文数有要求正数··· 第一天一直不知道错在哪,也是跪了,后来觉得表不会错了吧,看一下题目果然orzz)可以先用A = 42 找出上界。然后对于每一组都暴力找就好了。
从上界往下找,找到就弹出。之前太蠢,从下开始找,每次都要找到上界才确定最大n。

//关于数组大小的上线可以先用42/1 判断,发现大小不会超过1200000
//确定大小再跑
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define M 1200000
#define INF 0x3f3f3f3f
bool is_prime[M];
bool is_pali[M];
int num_prime[M];
int num_pali[M];
int a[M];
int p,q;
bool judge_pali(int a)
{char s[100];sprintf(s,"%d",a);int l = strlen(s);bool ok = true;for(int i = 0;i < l/2;i++){if(s[i] != s[l-1-i]){ok = false;break;}}if(!ok) return false;return true;
}
int main()
{for(int i = 1;i <= M;i++)  //fuck postive !!{if(judge_pali(i)){is_pali[i] = true;num_pali[i] = num_pali[i-1] +1;}else{is_pali[i] = false;num_pali[i] = num_pali[i-1];}is_prime[i] = true;}is_prime[1] = false;is_prime[0] = false;for(int i = 2;i <= M;i++){if(is_prime[i]){num_prime[i] = num_prime[i-1]+1;for(int j = 2*i;j <= M;j += i)is_prime[j] = false;}else num_prime[i] = num_prime[i-1];}int ans = 0;while(scanf("%d %d",&p,&q)==2){double a = (double)p/q;int maxx = -INF;int ok = 0;for(int i = 1;i <= M;i++)  //因为要找最大的所以用逆序从大到小找,找到直接弹出会快一点。{if(num_prime[i] - a*num_pali[i] <= 0){maxx = i;ok = 1;}}if(!ok) printf("Palindromic tree is better than splay tree\n");else printf("%d\n",maxx);}/*for(int i = 0;i <= 100;i++){printf("%d : prime = %d pali = %d\n",i,num_prime[i],num_pali[i]);printf("%d : prime - pali = %d\n",i,num_prime[i]-num_pali[i]); 不单调 会出现激增的 像-1 -1 -1 0 0 0 -1}*/return 0;
}

C题留着明天写,好题,感觉涨姿势了!!!

集训 08/12题解相关推荐

  1. php中英文手册(集成用户注释08/12/2007)

    php中英文手册(集成用户注释08/12/2007) August 13, 2007 at 7:01 am · Filed under Develop, PHP Develop 再不更新就跟不上形势了 ...

  2. 暑期集训1期11暑期集训一期12阶段性测验

    暑期集训1期11 1.树状数组模板 2.线段树模板 暑期集训一期12阶段性测验 T1棒棒糖之王(^)前面讲过 T2烤乐滋埋雷(模拟) 用一个数组存储每一列是不是有炸弹,再用一个数组表示每一行有没有,最 ...

  3. 【题解】少女觉 (2019.08.12纪中【NOIP提高组】模拟 B 组T1)贪心

    题目来源:中山纪念中学 题目描述: 在幽暗的地灵殿中,居住着一位少女,名为古明地觉. 据说,从来没有人敢踏入过那座地灵殿,因为人们恐惧于觉一族拥有的能力--读心. 掌控人心者,可控天下. 咳咳. 人的 ...

  4. [2019 牛客CSP-S提高组赛前集训营4题解] 复读数组(数论)+ 路径计数机(数上DP)+ 排列计数机(线段树+二项式定理)

    文章目录 T1:复读数组 题目 题解 代码实现 T2:路径计数机 题目 题解 代码实现 T3:排列计数机 题目 题解 CODE T1:复读数组 题目 有一个长为n×k的数组,它是由长为n的数组A1,A ...

  5. 牛客网CSP-S提高组赛前集训营1题解(仓鼠的石子游戏 [博弈论] + 乃爱与城市的拥挤程度 [树上DP] + 小w的魔术扑克[dfs + 离线])

    文章目录 T1:仓鼠的石子游戏 题目 题解 代码实现 T2:乃爱与城市拥挤程度 题目 题解 代码实现 T3:小w的魔术扑克 题目 题解 代码实现 T1:仓鼠的石子游戏 题目 仓鼠和兔子被禁止玩电脑,无 ...

  6. jzoj 4883. 【NOIP2016提高A组集训第12场11.10】灵知的太阳信仰

    Description 在炽热的核熔炉中,居住着一位少女,名为灵乌路空. 据说,从来没有人敢踏入过那个熔炉,因为人们畏缩于空所持有的力量--核能. 核焰,可融真金. 咳咳. 每次核融的时候,空都会选取 ...

  7. 2021牛客寒假算法基础集训营1 题解

    A.串 题解: dp 三维dp可能更好理解一些. dp[i][j][k]dp[i][j][k]dp[i][j][k]代表长度为iii的字符串,当j=1时代表已经含有u了的字符串的个数,k=1时代表已经 ...

  8. JZOJ4883. 【NOIP2016提高A组集训第12场11.10】灵知的太阳信仰 2017.10(B组)

    Description 在炽热的核熔炉中,居住着一位少女,名为灵乌路空. 据说,从来没有人敢踏入过那个熔炉,因为人们畏缩于空所持有的力量--核能. 核焰,可融真金. 咳咳. 每次核融的时候,空都会选取 ...

  9. JZOJ4883. 【NOIP2016提高A组集训第12场11.10】灵知的太阳信仰

    题目 20 40 80 100 大致流程 code 题目 Description 在炽热的核熔炉中,居住着一位少女,名为灵乌路空. 据说,从来没有人敢踏入过那个熔炉,因为人们畏缩于空所持有的力量--核 ...

最新文章

  1. opencv配置(转)
  2. 深度学习100例-生成对抗网络(DCGAN)生成动漫人物 | 第20天
  3. 列表对象转数组 微信小程序_微信小程序——无限递归的层次列表
  4. 衡阳市2017计算机考试,2017湖南衡阳中考各科目满分及分值公告
  5. 中石油训练赛 - 小A盗墓(线段树+异或结论)
  6. 事务传播机制/数据库异常解析——2016-8-13分享总结
  7. 开发微信小程序中SSL协议的申请、证书绑定、TLS 版本处理等
  8. 我也说说刘谦在2010年春晚上的魔术作假
  9. 计算机教学怎么为护士服务卫校,【计算机教学论文】中专卫生学校计算机教学论文(共1480字)...
  10. 华南x79主板设置硬盘启动_硬盘无法识别怎么办?最全的解决办法
  11. MOSEK安装教程及安装过程遇到的问题
  12. 电脑技巧:Win10操作系统关闭这几个功能,可以大幅度提升电脑的运行速度
  13. WordPress .htaccess 安全配置15个
  14. 复旦大学计算机学院教师简介,复旦大学计算机科学技术学院导师教师师资介绍简介-危辉...
  15. 深度学习之迁移学习介绍与使用
  16. H5游戏开发包括哪些游戏类型
  17. 第九届大唐杯省赛知识点梳理-5G无线技术(35%)
  18. sa8155 qnx开发笔记之一设备共享
  19. ASP.NET是什么?与.NET有什么关系
  20. JAVA和SQL中时间的格式化 (yyyy-MM-dd HH:mm:ss转换规则)知识总结

热门文章

  1. 如何快速创建在线员工培训课程
  2. 城链科技平台,正在实现真正意义上的价值互联网重构!
  3. 一目了然 AI和PS的区别
  4. 【PP那些事儿】SAP母子工单(汇总工单)测试
  5. 云课堂如何培养下一代创新思辨的能力?
  6. (document).height()与$(window).height()
  7. react的props验证
  8. ?selectableItemBackground 水波纹效果
  9. windows安装部署hadoop 2.7.7
  10. win10系统更新后,网络连接显示正常(能登qq),但是所有浏览器都打不开网页,谷歌火狐显示代理拒接连接。