跟着xiaoxin巨巨做cf
题目大意:有一个数列{xi},每次给出一个询问[l, r],即问 S(l ,r)是l和r之间的素数,f(p)表示数列{xi}中整除p的个数
思路:筛法,显然xi的顺序是无所谓的,我们把它记录下来,然后做筛法,如果一个素数筛合数的过程中遇到一个数的话显然得记到这个素数的头上,然后再把这样得到的表求一个sum就行
#include<iostream>
#include<cstdio>
#define maxn 10000009
int sum[maxn*],ans[maxn*];
bool visit[maxn*];
int main()
{
int n,m,x,y;
scanf("%d",&n);
for(int i=;i<=n;i++)
{
scanf("%d",&x);
sum[x]++;
}
for(int i=;i<=maxn;i++)
{
if(!visit[i])
{
for(int j=;j*i<=maxn;j++)
{
visit[i*j]=;
ans[i]+=sum[i*j];
}
}
ans[i]+=ans[i-];
}
scanf("%d",&m);
for(int i=;i<=m;i++)
{
scanf("%d%d",&x,&y);
if(x>=maxn )x=maxn;
if(y>maxn)y=maxn;
printf("%d\n",ans[y]-ans[x-]);
} return ;
}
cf 14 E Camels
题目大意:问你长度为n的数列,其中只有1 到4 ,有t个峰 t-1个谷并且不存在连续两个相同高度的序列的个数
思路:dp[i][j][k][b]表示现在到第i个数字,第i个数字为j,有k个驼峰,如果第i个点高于第i-1个点那么b=0,不然b=1,可以很自然的推出转移,不过需要注意的是仔细画一下就可以发现峰和谷必然是交替出现的,并且在头和尾上必然是一个上升一个下降的,不然不可能满足t-1个谷,所以在i=2的时候强制上升就可以了
#include<iostream>
#include<cstdio>
using namespace std;
int dp[][][][];
int main()
{
int n,t;
scanf("%d%d",&n,&t);
for(int i=;i<=;i++)dp[][i][][]=;
for(int i=;i<=n;i++)
{
for(int j=;j<=;j++)
{
for(int k=;k<=min(i,t);k++)
{
for(int m=;m<=j-;m++)
{
dp[i][j][k][]+=dp[i-][m][k][]+dp[i-][m][k][];
}
if(i!=)for(int m=j+;m<=;m++)
{
dp[i][j][k][]+=dp[i-][m][k-][]+dp[i-][m][k][];
}
}
}
}
int ans=;
for(int i=;i<=;i++)ans+=dp[n][i][t][];
printf("%d\n",ans);
return ;
}
cf 69D Dot
题目大意:一开始在坐标系中有一个点,两人轮流操作,每次操作可以将一个点走一个偏移量(偏移量是给定的,题目给出了一坨偏移量,每次选择一个),或者每个选手有一次机会把点做y=x的对称操作,谁让点离远点欧几里的距离超过d谁就输,问谁胜
思路:博弈dp,利用一个P有一个子局面是N态,而N态所有子局面都是P态的思路进行记忆话搜索,值得注意的是y=x对称的这个操作是没有用的,显然这个操作不会改变和原点的距离,并且如果对手这个操作以后改变了当前局面的N P状态的话也可以改回来,由于只能改一次,对于胜负状态没有影响
#include<cstdio>
#include<iostream>
#define maxn 1000
using namespace std;
int x[maxn],y[maxn],d,n,xx,yy,dp[][];
int dfs(int a,int b)
{
if(a*a+b*b>d*d)return ;
int &u=dp[a+][b+];
if(u!=)return u;
for(int i=;i<=n;i++)if(dfs(a+x[i],b+y[i])==)return u=;
return u=;
}
int main()
{
scanf("%d%d%d%d",&xx,&yy,&n,&d);
for(int i=;i<=n;i++)scanf("%d%d",&x[i],&y[i]);
if(dfs(xx,yy)==)puts("Anton");else puts("Dasha");
return ;
}
CF 276 D. Little Girl and Maximum XOR
题目大意:在区间[L,R]中最大的a^b的值
思路:当时做群赛的时候做的这题,xiaoxin机智的打表得出了答案都是2^n-1的形式,然后只要知道n是多少就行,然后仔细想想就能发现其实就是L和R中从高位算起第一位二进制不同的位
#include<iostream>
#include<cstdio>
#include<cstring>
#define LLD "%lld"
using namespace std;
int main()
{
long long a,b;
scanf(LLD LLD,&a,&b);
long long cnt=,n=a^b;
while(n>)
{
cnt++;
n>>=;
}
printf(LLD"\n",(1LL<<(cnt))-);
return ;
}
CF 257 B. Playing Cubes
题目大意:有N个蓝木块和M个红木块,两人分别在其中拿出一个放成一排,一人是以最后相邻同色木块数量得分,一人是以相邻不同色木块计分,两人都用最优策略使自己得分最高问最后得分情况
思路:稍微想想就知道最后序列是这样的BRRBBRRBBRRRRRRRRRRR总是以少的那个颜色开头,然后对着这串多看两眼就能想到答案了
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int a,b;
scanf("%d%d",&a,&b);
if(a<b)swap(a,b);
printf("%d %d\n",a-,b);
return ;
}
CF 343 B. Alternating Current
题目大意:给你两根绳子,弯弯绕,问你最后能不能仅扯着四个线头把两条绳子分开
思路:显然++或者--这种情况直接可以舍掉的,然后很自然的想到用栈来搞,然后就没有然后了
#include<iostream>
#include<cstdio>
#include<cstring>
#include<stack>
#define maxn 500000
using namespace std;
stack<int>q;
char ch[maxn];
int main()
{
scanf("%s",ch+);
int len=strlen(ch+);
for(int i=;i<=len;i++)
{
char c=ch[i];
if(!q.empty())
{
char u=q.top();
if(u==c)q.pop();else q.push(c);
}
else q.push(c);
}
if(q.empty())puts("Yes");else puts("No");
return ;
}
跟着xiaoxin巨巨做cf的更多相关文章
- c++中清空输入缓冲区的方法(做cf的时候炸了)
C/C++ 四种清空输入缓冲区的方法 比较实用的一种 char c; while(c=getchar()!='\n'); 或者是这种 cin.ignore(count,c); count代表要清除的字 ...
- = =写个prim希望能够巨巨们看的懂
prim算法---典型的贪心算法 求最小生成树的算法 (Minimum Spanning Tree)最小生成树: 算法思想:设图G顶点集合为U,首先任意选择图G中的一点作为起始点a,将该点加入集合V, ...
- hdu5651 xiaoxin juju needs help(逆元)
xiaoxin juju needs help Accepts: 150 Submissions: 966 Time Limit: 2000/1000 MS (Java/Others) Mem ...
- Diary / Solution Set -「WC 2022」线上冬眠做噩梦
大概只有比较有意思又不过分超出能力范围的题叭. 可是兔子的"能力范围" \(=\varnothing\) qwq. 「CF 1267G」Game Relics 任意一个 ...
- XTUOJ 1248 TC or CF 搜索
这个题一眼看上去不会 然后有人说是网络流 然后我就想怎么建图啊,然后不会(是本蒟蒻太垃圾了),肯定有网络流解法 然后去群里问了gdut的巨巨,他说他队友爆搜+剪枝过了(我也是非常的叹服) 然后我也写了 ...
- CF#213DIV2:B The Fibonacci Segment
You have array a1, a2, ..., an. Segment [l, r] (1 ≤ l ≤ r ≤ n) is good if ai = ai - 1 + ai - 2, for ...
- 在 Laravel 项目中使用 Elasticsearch 做引擎,scout 全文搜索(小白出品, 绝对白话)
项目中需要搜索, 所以从零开始学习大家都在用的搜索神器 elasiticsearch. 刚开始 google 的时候, 搜到好多经验贴和视频(中文的, 英文的), 但是由于是第一次接触, 一点概念都没 ...
- 【Codeforces】CF 467 C George and Job(dp)
题目 传送门:QWQ 分析 dp基础题. $ dp[i][j] $表示前i个数分成j组的最大和. 转移显然. 吐槽:做cf题全靠洛谷翻译苟活. 代码 #include <bits/stdc++. ...
- 基于pygame的打砖块游戏,做到一半,不带做了
跟着一个博主做的,前面的变量的定义全是内个哥们的,没带任何改动,就做了个界面,背景音乐,绘制了个小球,绘制了挡板 小球可以撞到边界反弹,然后做了砖块,定义了一个存放砖块的列表,,,就没有下文了 原博主 ...
随机推荐
- Java文件操作系列[3]——使用jacob操作word文档
Java对word文档的操作需要通过第三方组件实现,例如jacob.iText.POI和java2word等.jacob组件的功能最强大,可以操作word,Excel等格式的文件.该组件调用的的是操作 ...
- 遍历PspCidTable枚举进程
//测试环境:win7 32位 1 // DriverEntry.cpp #include "ntddk.h" #include <ntddvol.h> #includ ...
- 如何找到SAP Cloud for Customer标准培训和认证方面的信息
有一些朋友询问我如何在SAP官网上找到和SAP Cloud for Customer相关的标准培训信息,我这里把步骤写出来: 登录SAP官网https://training.sap.com 输入和Cl ...
- iTOP-IMX6UL 实战项目:ssh 服务器移植到 arm 开发板
实验环境:迅为提供的Ubuntu12.04.2 以及虚拟机 编译器:arm-2009q3 编译器 开发板系统:QT系统 开发板使用手册中给Windows 系统安装了 ssh 客户端,给 Ubunt ...
- CocoaPods 安装使用
CocoaPods是一个负责管理iOS项目中第三方开源代码的工具.CocoaPods项目的源码在Github上管理.该项目开始于2011年8月 12日,经过一年多的发展,现在已经超过1000次提交,并 ...
- HDU 6041 I Curse Myself(点双联通加集合合并求前K大) 2017多校第一场
题意: 给出一个仙人掌图,然后求他的前K小生成树. 思路: 先给出官方题解 由于图是一个仙人掌,所以显然对于图上的每一个环都需要从环上取出一条边删掉.所以问题就变为有 M 个集合,每个集合里面都有一堆 ...
- PE基础2
PE课程002 怎么找到Nt头? (PIMAGE_NT_HEADER)(DOS.e_lfanew + (DWORD)m_pBuff) 怎么找到第一个区段表? 区段头位置 = pNt + 4 + 文件头的 ...
- MIPS简单入门
What ‘s the MIPS? 汇编语言 汇编语言是一类语言的总称,因处理器不同,而对应的不同机器的指令集也不同,产生了很多种汇编语言. 目前最流行的是ARM,MIPS,x86.ARM用于大量的移 ...
- C# DateTime.Now函数
// 2008年4月24日 System.DateTime.Now.ToString( " D " );// 2008-4-24 System.DateTime.Now.ToStr ...
- ucosii(2.89)mutex 应用要点
mutex 的创建在于共享资源打交道是可以可以保证满足互斥条件:1,必须保证继承优先级要高于可能与相应共享资源打交道的任务中优先级最高的优先级.2,不要将占有Mutex的任务挂起,也不要让占有mute ...