第一次在codeforce上打题,补一下题记录成长

D题

分析:求数组中两个互质的数的最大下标和;
思路:观察到数据范围n是2e5暴力做n^2会超时,再观察数据a[i]最大为1000,所以这2e5个数中必然有很多重复的,对于重复的我们只需要保存下表最大的a[i]即可这样我们便可以将数据范围缩小到1000,直接打暴力n ^2也不会超时

#include <iostream>
#include <unordered_map>
using namespace std;
const int N = 1010;
unordered_map<int, int>h;
struct wy{
int a;int p;
}wy[N];
inline int gcd(int a,int b)
{
return b>0 ? gcd(b,a%b):a;
}
int main() {
int m;cin >> m;
while(m --)
{
int n;cin >>n;
int cnt = 0;
int ans = 0;
for(int i = 1; i <= n; i ++)
{
int k; cin >> k;
if( h.find(k) == h.end())
{
wy[++ cnt] = {k, i};
h[k] = cnt;
}
else{
wy[h[k]] = {k,i};
}
}
bool st = false;
for(int i = 1; i <= cnt; i ++)
for(int j = 1; j <= cnt; j ++)
{
if(gcd(wy[i].a, wy[j].a) == 1)
{
ans = max(ans, wy[i].p + wy[j].p);
st = true;
}
}
if(st) cout << ans << endl;
else cout << -1 << endl;
h.clear();
}
return 0;
}

E题

分析:只需要在数组中找到第一个比k大的数即可,数据范围2e5所以不能暴力循环,观察题中的特点我们可以在原数组中构造一个单调递增的序列,如果k>a[i],那么原序列中a[i] ~ a[i + 1] 的数一定< a[i]也是满足条件的,这样我们求的是一段连续序列的和,可以用前缀和优化,这样便可以优化到nlogn

#include <iostream>
#include <algorithm>
using namespace std;
const int N = 2e5 + 10;
long long a[N],s[N]; int main() {
int m; cin >> m ;
while(m --)
{
int la, lb; cin >> la >> lb;
for(int i = 1; i <= la; i ++)
{
long long k; cin >> k;
a[i] = max(a[i - 1], k);
s[i] = s[i - 1] + k;
} while(lb --)
{
int q; cin >> q;
cout << s[upper_bound(a + 1, a + la + 1, q) - a - 1] << " ";
}
cout << endl;
}
return 0;
}

F题

分析:给定两个初始均为a的字符串,可以进行两种操作,一种是给第一个串加上k个str串,第二种是给第二个串加上k个str串,进行操作之后可以对两个串进行重新排序,问是否能有一种方案使串2的字典序大于串1
我们讨论串2进行k次操作后最大的字符,如果最大的字符>a那么只需把串1的a放在第一位即可,如果串2的最大字符就是a,只有使串1的最大字符也是a并且串1的长度小于串2的长度,所以每次操作后需要记录两个串的长度以及当前的最大字符即可

最重要的要观察一下数的范围会爆int

#include <iostream>
typedef long long ll;
using namespace std; int main() {
int m; cin >> m;
while(m --) {
int k;
cin >> k;
char mxa = 'a', mxb = 'a';
ll la = 1, lb = 1;
while (k--)
{
int op, q;
string str = "";
cin >> op >> q >> str;
int ls = str.size();
if (op == 1)
{
for (int i = 0; i < str.size(); i++) mxa = max(mxa, str[i]);
la += 1ll *ls * q;
}
else
{
for (int i = 0; i < str.size(); i++) mxb = max(mxb, str[i]);
lb += 1ll *ls *q;
}
if(mxb > 'a'|| ((mxa == 'a') && lb > la)) cout << "YES" << endl;
else cout << "NO" << endl;
}
}
return 0;
}

G题

分析:
1、首先或运算只会产生两种结果要么使一个数增大要么不变
2、每次我们都确定一个数使前面已经或起来的数和我们在剩余所有数中挑选出来的这个数或起来的结果是最大的,即可。
3、考虑要挑选多少次,题中所给的数是1e9,我们考虑最坏的情况每次或都会使当前数增加,那么1e9 < 2^31,在31次挑选数后即使我们随意放数也不会使这个数再增加了。

#include <iostream>
using namespace std;
const int N = 2e5 + 10;
typedef long long LL; inline void solve()
{
LL a[N], st[N];
int n; cin >> n;
int cur = 0;
for(int i = 0; i < n; i ++)
{
scanf("%d", &a[i]);
st[i] = false;
}
for(int i = 0; i < min(31, n); i ++)
{
int mx = 0, idx = -1;
for(int j = 0; j < n; j ++)
{
if(st[j]) continue;
if(mx < (cur | a[j]))
{
mx = (cur | a[j]);
idx = j;
}
}
st[idx] = true;
cout << a[idx] << " ";
cur = (cur | a[idx]);
}
for(int i = 0; i < n; i ++) if(!st[i]) cout << a[i] << " "; cout << endl;
}
int main() {
int m; cin >> m;
while(m --) solve();
return 0;
}

codeforce 827div4的更多相关文章

  1. Codeforce - Street Lamps

    Bahosain is walking in a street of N blocks. Each block is either empty or has one lamp. If there is ...

  2. Codeforce Round #216 Div2

    e,还是写一下这次的codeforce吧...庆祝这个月的开始,看自己有能,b到什么样! cf的第二题,脑抽的交了错两次后过了pretest然后system的挂了..脑子里还有自己要挂的感觉,果然回头 ...

  3. Codeforce 水题报告(2)

    又水了一发Codeforce ,这次继续发发题解顺便给自己PKUSC攒攒人品吧 CodeForces 438C:The Child and Polygon: 描述:给出一个多边形,求三角剖分的方案数( ...

  4. codeforce 375_2_b_c

    codeforce 375_2 标签: 水题 好久没有打代码,竟然一场比赛两次卡在边界条件上....跪 b.题意很简单...纯模拟就可以了,开始忘记了当字符串结束的时候也要更新两个值,所以就错了 #i ...

  5. codeforce 367dev2_c dp

    codeforce 367dev2_c dp 标签: dp 题意: 你可以通过反转任意字符串,使得所给的所有字符串排列顺序为字典序,每次反转都有一定的代价,问你最小的代价 题解:水水的dp...仔细想 ...

  6. 三维dp&codeforce 369_2_C

    三维dp&codeforce 369_2_C 标签: dp codeforce 369_2_C 题意: 一排树,初始的时候有的有颜色,有的没有颜色,现在给没有颜色的树染色,给出n课树,用m种燃 ...

  7. 强连通分量&hdu_1269&Codeforce 369D

    强连通分量 标签: 图论 算法介绍 还记得割点割边算法吗.回顾一下,tarjan算法,dfs过程中记录当前点的时间戳,并通过它的子节点的low值更新它的low,low值是这个点不通过它的父亲节点最远可 ...

  8. 【树状数组】区间出现偶数次数的异或和(区间不同数的异或和)@ codeforce 703 D

    [树状数组]区间出现偶数次数的异或和(区间不同数的异或和)@ codeforce 703 D PROBLEM 题目描述 初始给定n个卡片拍成一排,其中第i个卡片上的数为x[i]. 有q个询问,每次询问 ...

  9. 解题报告:codeforce 7C Line

    codeforce 7C C. Line time limit per test1 second memory limit per test256 megabytes A line on the pl ...

  10. Two progressions CodeForce 125D 思维题

    An arithmetic progression is such a non-empty sequence of numbers where the difference between any t ...

随机推荐

  1. 微服务探索之路06篇k8s配置文件Yaml部署Redis使用Helm部署MongoDB和kafka

    1 安装Redis 1.1创建配置文件redis.conf 切换到自己的目录下如本文是放在/home/ubuntu下 cd /home/ubuntu vim redis.conf bind 0.0.0 ...

  2. HTML超文本标记语言3

    三.HTML表单标签 1.form标签 <form> form标签 name=表单名称,action=表单提交的地址,method=表单提交方式:get/post get/post详解: ...

  3. JFrame一些基础小知识

    JFrame.setLocationRelativeTo方法 JFrame.setLocationRelativeTo()是一个Java Swing中的方法,它用于将窗口居中显示在屏幕上. 当你调用该 ...

  4. 论文解读(DWL)《Dynamic Weighted Learning for Unsupervised Domain Adaptation》

    [ Wechat:Y466551 | 付费咨询,非诚勿扰 ] 论文信息 论文标题:Dynamic Weighted Learning for Unsupervised Domain Adaptatio ...

  5. mysql 命令安装

    1.   mysql  下载安装好压缩文件,下面我们进入正题,少废话. 09:39:112023-08-05 先到 mysql 官方网站下载:https://dev.mysql.com/downloa ...

  6. Linux:通过命令查找日志文件中的某字段

    工作中有用到,做个记录. 1. 查询某字段,显示行号: cat -n file_name|grep '查找字段' [root@ZWZF-CWY-LZY-12 CWY]# cat -n nohup.ou ...

  7. 原生CSS嵌套简介

    嵌套是使用Sass等CSS预处理器的核心原因之一.现在,该功能已经以类似的语法出现在标准浏览器CSS中.你能否在构建系统时放弃对预处理器的依赖? CSS嵌套可以节省输入时间,并使语法更易于阅读和维护. ...

  8. Pytest 框架执行用例流程浅谈

    背景: 根据以下简单的代码示例,我们将从源码的角度分析其中的关键加载执行步骤,对pytest整体流程架构有个初步学习. 代码示例: import pytest def test_add(): asse ...

  9. O2OA(翱途)开发平台 V8.1正式发布

    尊敬的O2OA(翱途)平台合作伙伴.用户以及亲爱的开发小伙伴们,平台 V8.1版本已正式发布.正值8月的最后一周,我们以更安全.更高效.更好用的崭新面貌迎接9月的到来. O2OA开发平台v8.1版本更 ...

  10. 使用API数据接口获取商品详情数据的流程

    API数据接口是开发者获取第三方平台数据的一种方式,使用API接口可以快速地获取海量的商品详情数据,相比其他方式更加高效.实时.下面将介绍使用API数据接口获取商品详情数据的主要流程和步骤: 申请AP ...