知识点模块

1.通过三点计算三角形的面积可以这样写

area=fabs(x1*y2-x2*y1+x2*y3-x3*y2+x3*y1-x1*y3)/2;

2.最小公倍数与最大公约数

x×y=gcd(x,y)*lcm(x,y)

3.预处理非最小值每个点下一个的最小值的位置

for(int i=n,p=1e9;i>=1;i--)

{pos[i]=p;

if(ve[i]==minn) p=i;}

4.初始化一个有30位个1的二进制位

int a=(1<<30)-1

B. AND Sorting

这题我们发现将样例中的每个位置不匹配的按顺序与下去,得到的就是结果,猜一猜写一下,学习一下使用二进制数1111111111.....的初始化

点击查看代码
#include <bits/stdc++.h>
#define int long long
using namespace std;
void solve()
{
int n;
cin>>n;
int ans= (1<<30) -1;//初始化一个很长的111111111
//其实他们的解释我也听不懂
//但是反正每个位置不同的数与一下就是样例的结果
//猜着猜着来吧
for(int i=0;i<n;i++)
{
int x;
cin>>x;
if(x!=i) ans&=x;
}
cout<<ans<<endl;
} signed main()
{
int t=1;
cin>>t;
while(t--) solve();
return 0;
}

C. 3SUM Closure

1.假如有n个数,里面至少有3个数a>b>c>0,那么a+b+c>a是肯定的,这个元素肯定不符合题意,那么三个负数也是同理的。

2.我们注意到当三个数为0 0 x的时候,无论你的x是任何数,都是符合题意的,那么如果有很多个0和x,只需要取1个0,怎么理解呢,如果我们是-2,2,0,0其实和-2 2 0是等价的,举其他例子也是同理。

3.综上,我们其实最多只能取到两个正数,两个负数和一个0的情况,为什么一定要有1个0呢?因为我举不出来没有0可以符合的情况。

所以我们只需要检查一下,有没有0,检查一下有几个正数负数,检查完以后再暴力遍历验证一下就可以

点击查看代码
#include <bits/stdc++.h>
#define int long long
using namespace std;
void solve()
{
int n,markz=0,markf=0,zero=0,check=1;
cin>>n;
vector<int>ve;
map<int,int>mp;
for(int i=1;i<=n;i++)
{
int x;
cin>>x;
if(x>0) {
if(++markz<3) ve.push_back(x),mp[x]=1,check=0;
}
else if(x<0)
{
if(++markf<3) ve.push_back(x),mp[x]=1,check=0;
}
else if(++zero==1) ve.push_back(x),mp[x]=1;
}
//如果有三个及以上正数或者三个及以上负数都不符合
//因为a+b+c>a(a最大) 负数同理
//由于0 0 x当x取任何数都符合情况,所以当有多个0的时候,我们只需要把一个放入数组即可
if(markz>=3||markf>=3) {
cout<<"NO"<<endl;
return ;
}
if(check==1) {
cout<<"YES"<<endl;
return;
}
for(int i=0;i<ve.size();i++)
{
for(int j=i+1;j<ve.size();j++)
{
for(int k=j+1;k<ve.size();k++)
{
if(mp[ve[i]+ve[j]+ve[k]]==0) {
cout<<"NO"<<endl;
return;
}
}
}
} cout<<"YES"<<endl;
} signed main()
{
int t=1;
cin>>t;
while(t--) solve();
return 0;
}

H. Fight Against Monsters

本质上其实是一个贪心的问题,当时我想的是用前缀和来减少时间复杂度,但是这样还是会超时,所以改变一下记录代价的思维,记录每个怪物攻击的次数,最后一步计算总代价的时候直接加上去大概就是O(n)的复杂度,我们排序的时候要注意结合次数和攻击来排序,并不是攻击力越大的排在越前面,举个例子4 5和3 2,代码有注解

点击查看代码
#include <bits/stdc++.h>
#define int long long
using namespace std;
int swj=1;
typedef pair<int,int>pii;
struct a{
int hp;
int atk;
int cnt;
}ve[100005]; int num(int x)//计算杀死一个怪物要几次
{
int sum=0,cnt=1;
while(x>0)
{
sum++;
x-=cnt++;
}
return sum;
} bool cmp(a xx,a yy){
return xx.atk*yy.cnt>yy.atk*xx.cnt;//并不是伤害大就排前面 要结合出现次数
} void solve()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>ve[i].hp>>ve[i].atk;
int x=ve[i].hp;
ve[i].cnt=num(x);//num用来计算杀死这个怪物要几次
} sort(ve+1,ve+n+1,cmp); //与我思路不同在于最小代价的计算人家是算每个怪物的总次数
//比如样例1攻击力6次 2攻击了4次 3攻击了2次 代价为19
int ans=0,cntt=0;
for(int i=1;i<=n;i++)
{
cntt+=ve[i].cnt;
ans+=cntt*ve[i].atk;
}
cout<<"Case #"<<swj++<<": ";
cout<<ans<<endl;
} signed main()
{
int t=1;
cin>>t;
while(t--) solve();
return 0;
}

B. Nana Likes Polygons

湖北省赛B题,我们要凸多边形的最小值,那么就是三角形,只要通过暴力遍历输入的点找最小值并更新即可,如果找不到最小值就是0,注意输出的时候要开到小数点后6位,不然是过不去的,还有注意更新最小值的条件

点击查看代码
#include <bits/stdc++.h>
#define int long long
using namespace std;
typedef pair<int,int>pii;
void solve()
{
int n;
cin>>n;
vector<pii>ve(n+1);
for(int i=1;i<=n;i++)
{
cin>>ve[i].first>>ve[i].second;
} double minn=1e15;
bool check=0;
for(int i=1;i<=n-2;i++)
{
for(int j=i+1;j<=n-1;j++)
{
for(int k=j+1;k<=n;k++)
{
int x1=ve[i].first,y1=ve[i].second;
int x2=ve[j].first,y2=ve[j].second;
int x3=ve[k].first,y3=ve[k].second;
double area=fabs((x1*y2+x2*y3+x3*y1-x1*y3-x3*y2-x2*y1)/2.0);
//若无法构成三角形就是0
if(area>0)
{
minn=min(minn,area);
check=1;
}
//cout<<area<<endl;
}
}
} if(!check) cout<<-1<<endl;
else printf("%.7lf\n",minn); } signed main()
{
int t=1;
cin>>t;
while(t--) solve();
return 0;
}

A. Long Live

x×y=gcd(x,y)*lcm(x,y),那么把这坨代入进去以后就是a ^ 2×b=x×y/gcd(x,y)^2,把a除过去,当a最小时ab最大,因为a只会是整数,所以a为1时这就成立了,而左边的这坨是可以算出来的定值

点击查看代码
#include <bits/stdc++.h>
#define int long long
using namespace std;
void solve()
{
int x,y;
cin>>x>>y;
int fm=gcd(x,y);
cout<<1<<" "<<(x*y)/(fm*fm)<<endl; } signed main()
{
int t=1;
cin>>t;
while(t--) solve();
return 0;
}

E. Equality

这一题本质上也是个贪心的问题,但是遇到的类型比较奇特,所以要学习一下,理解完题意以后我们可以这样做,第一步,先找所有数字里面的最大值和最小值,若最大值等于最小值说明数字全都相等没有答案,若有最大值和最小值,便再看k是否为1,若为1,也不符合题意,符合题意以后,我们大概的思路就是枚举左端点,若左端点为最小值则跳过,下标++,若不是最小值,我们检查这个端点的下一个最小值的位置是否合法,若合法更新下标,不合法则往左退一位再更新下标,因为此时左边已经全为最小值

点击查看代码
#include <bits/stdc++.h>
using namespace std;
#define int long long void solve()
{
int n,k;
int maxx=-1,minn=1e9;
cin>>n>>k;
vector<int>ve(n+1);
for(int i=1;i<=n;i++)
{
cin>>ve[i];
maxx=max(ve[i],maxx);
minn=min(ve[i],minn);
} if(maxx==minn) cout<<0<<endl;
else {
if(k==1) cout<<"-1"<<endl;
else {
vector<int>pos(n+1,1e9);
//预处理每一数字的最小值的下一个位置
for(int i=n,p=1e9;i>=1;i--){
pos[i]=p;
if(ve[i]==minn) p=i;
} int sum=0;
for(int i=1;i<=n;i++)
{
if(ve[i]==minn) continue;
sum++;
//检查不为最小值的点的下一个最小值的位置是否合法,如果可以直接换下标
//如果不可以,则左端点往左移一格
if(pos[i]>=i+k) i--;
i+=k-1;// + k-1是因为更新完后i会自己++ 如果是+k就会跳过一个点
} cout<<sum<<endl; } } } signed main(){
int t=1;
cin>>t;
while(t--) solve();
return 0;
}

J. Points on the Number Axis A

这题还没理解,还得问问再补

L. LCMs

这题也还没理解,还得补

一些CF上的补题0504的更多相关文章

  1. Educational Codeforces Round 24 CF 818 A-G 补题

    6月快要结束了 期末也过去大半了 马上就是大三狗了 取消了小学期后20周的学期真心长, 看着各种北方的学校都放假嗨皮了,我们这个在北回归线的学校,还在忍受酷暑. 过年的时候下定决心要拿块ACM的牌子, ...

  2. 【春训团队赛第四场】补题 | MST上倍增 | LCA | DAG上最长路 | 思维 | 素数筛 | 找规律 | 计几 | 背包 | 并查集

    春训团队赛第四场 ID A B C D E F G H I J K L M AC O O O O O O O O O 补题 ? ? O O 传送门 题目链接(CF Gym102021) 题解链接(pd ...

  3. CF上的3道小题(2)

    CF上的3道小题(2) T1:CF630K Indivisibility 题意:给出一个数n,求1到n的数中不能被2到9中任意一个数整除的数. 分析:容斥一下,没了. 代码: #include < ...

  4. CF上的3道小题(1)

    CF上的3道小题 终于调完了啊.... T1:CF702E Analysis of Pathes in Functional Graph 题意:你获得了一个n个点有向图,每个点只有一条出边.第i个点的 ...

  5. 【cf补题记录】Codeforces Round #608 (Div. 2)

    比赛传送门 再次改下写博客的格式,以锻炼自己码字能力 A. Suits 题意:有四种材料,第一套西装需要 \(a\).\(d\) 各一件,卖 \(e\) 块:第二套西装需要 \(b\).\(c\).\ ...

  6. 【cf补题记录】Codeforces Round #607 (Div. 2)

    比赛传送门 这里推荐一位dalao的博客-- https://www.cnblogs.com/KisekiPurin2019/ A:字符串 B:贪心 A // https://codeforces.c ...

  7. 4.30-5.1cf补题

    //yy:拒绝转载!!! 悄悄告诉你,做题累了,去打两把斗地主就能恢复了喔~~~ //yy:可是我不会斗地主吖("'▽'") ~~~那就听两遍小苹果嘛~~~ 五一假期除了花时间建模 ...

  8. 2020.12.20vj补题

    A - Insomnia cure 题意:一共s只龙,每隔k,l,m,n只龙就会受伤,问这s只龙有多少龙是受伤的 思路:看起来题目范围并不是很多,直接进行循环判断 代码: 1 #include< ...

  9. hdu5017:补题系列之西安网络赛1011

    补题系列之西安网络赛1011 题目大意:给定一个椭球: 求它到原点的最短距离. 思路: 对于一个椭球的标准方程 x^2/a^2 + y^2/b^2 +z^2/c^2=1 来说,它到原点的最短距离即为m ...

  10. 2017河工大校赛补题CGH and 赛后小结

    网页设计课上实在无聊,便开始补题,发现比赛时候僵着的东西突然相通了不少 首先,"追妹"这题,两个队友讨论半天,分好多种情况最后放弃(可是我连题目都没看啊),今天看了之后试试是不是直 ...

随机推荐

  1. DVWA靶场XSS漏洞通关教程及源码审计

    XSS漏洞 XSS(跨站脚本攻击,Cross-Site Scripting)是一种安全漏洞,通常发生在Web应用程序中.XSS漏洞允许攻击者把恶意脚本注入到内容中, 这会在其他用户的浏览器中执行.这种 ...

  2. 对rpc长连接与短连接的思考

    大家好,我是思无邪,某go中厂开发工程师,也是OSPP2024的学生参与者! 如果你觉得我的文章有帮助,记得三连支持一下哦! 目前正在深入研究源码,与你们一起进步,共同攻克编程难关! 欢迎关注我的公众 ...

  3. GD32F103C8T6入门——GPIO配置点亮LED

    1.硬件 GD32F103C8T6最小系统板 ST-LINK V2下载器 2.GPIO说明 每个通用I/O端口都可以通过两个32位的控制寄存器(GPIOx_CTL0/ GPIOx_CTL1)和两个32 ...

  4. 文本处理命令head tail more less tr cut paste wc

    文本处理命令 命令**head tail more less tr cut paste wc** 磁盘分区利用率 df|tr -s ' ' :|cut -d : -f5 df|tr -s ' ' :| ...

  5. 记一次腾讯云轻量级服务器安装mysql配置完成后,外网无法访问问题

    一.配置信息正常 1.防火墙配置通过 2.mysql端口正常启动netstat -antlp | grep 3306 3.配置都正常,但是telnet访问不通超时Operation timed out ...

  6. TIPTOP应付账款流程学习

    应付账款流程与应收账款流程是财务管理的开端,也是财务工作的主要流程. 企业的应付账款有很多种,如原材料的应付账款.电力能源的应付账款.房租的应付账款等,大头是原材料的应付账款,以下详细说明. 在讲解之 ...

  7. Java开发自学第一天

    Java学习日志 Day 01|2025/2/11|累计1天 今日学习时长 6小时 当日学习目标 1.了解JVM.JDK.JRE 2.学习Idea开发工具的基本使用 3.基本语法:运算符.数据类型.变 ...

  8. Linux驱动---字符设备

    目录 一.基础简介 1.1.Linux设备驱动分类 1.2.字符设备驱动概念 二.驱动基本组成 2.1.驱动模块的加载和卸载 2.2.添加LICENNSE以及其他信息 三.字符设备驱动开发步骤 3.1 ...

  9. [luogu1248] 加工生产调度 题解

    考虑 \(i\) 排在 \(j\) 前的条件是 \(a_i+\max(a_j,b_i)+b_j\le a_j+\max(a_i,b_j)+b_i\),然后发现这一坨东西是皇后游戏中的倒数第三个式子,直 ...

  10. [SCOI2007] 蜥蜴 题解

    发现实际上就是在求有多少只蜥蜴能逃出来. 发现可以将柱子拆成入点和出点两部分,自己的出点向别人的入点连边,自己的入点向自己的出点连边.最后再加一个超级源点 \(S\),连接所有有蜥蜴的柱子入点:再加一 ...