这次终于找到了靠谱队友,比之前我做不出来==队友做不出来好太多了

昨天3人热身赛疯狂杀了8道题,感觉今天稳了

一开始就瞅了A题,发现似乎可以dp,看了看数据,1e7,大概想出了nsqrtn算法,想着肯定能过就写了,结果一开始是wa,发现哪点不对之后就改了改,好,变TLE,出去一看通过率5%,就几千个提交中只过了50个不到,好,很有精神

大佬迅速A了C题,然后我开始看A题,想了很多方法,但似乎最后都不行,就换题了。

我队另一大佬看了看I感觉是记忆化,就。。。顺手A了?orz

然后我看D,要是今天一道做不出那就丢大人了。我看了看是要求算移除每个点之后图上联通分量个数,大佬们说是并查集和增改,但我感觉连通性,双向边,首先想到tarjan算法,然后由此展开,发现只要找出孤点,割点即可,幸好算法课讲了tarjan,我之前打死不会,然后发现断边需要找出的是联通分量,上网查了查有板子,应该是板子题没错了。孤点连通分量-1,然后割点-大小-1.,其他原样输出,就是中间不知道出什么问题了就是一直在wa,改了改,终于拿下一血,心才放下,1今天总算不丢面子了

然后大佬迅速A了J,我们队就四题了,躺就完事儿了

之后发现F题可做

然后就去搞F,感觉是个二分,思路也特别清晰,结果谁能料到是个int128

有些题看着像个二分,实际上是个int128题,dls&jlsの千层套路,比赛的时候试了好多都不能过,比赛之后凯哥跟我说了句换int128试试,结果就,我giao,过。。。。过了?什么神仙题目二分还要开__int128啊,我吐了啊,我没想到出题人能把数据拉满,真实呕吐

大型翻车现场就是本人了,不过还算是蛮有收获的的一场,下场再战!!

orz,我自己的代码放出来吧:

D题,Tarjan D,比赛的时候还是纠结了一小会的,但是求出来割点能把图分成的联通块数量就差不多了吧

#include <bits/stdc++.h>
using namespace std;
#define limit (10000000 + 5)//防止溢出
#define INF 0x3f3f3f3f
#define inf 0x3f3f3f3f3f
#define lowbit(i) i&(-i)//一步两步
#define EPS 1e-6
#define FASTIO ios::sync_with_stdio(false);cin.tie(0);
//#define ff(a) printf("%d\n",a );
#define pi(a,b) pair<a,b>
#define rep(i, a, b) for(ll i = a; i <= b ; ++i)
#define per(i, a, b) for(ll i = b ; i >= a ; --i)
#define MOD 998244353
#define traverse(u) for(int i = head[u]; ~i ; i = edge[i].next)
#define FOPEN freopen("C:\\Users\\tiany\\CLionProjects\\acm_01\\data.txt", "rt", stdin)
#define FOUT freopen("C:\\Users\\tiany\\CLionProjects\\acm_01\\dabiao.txt", "wt", stdout)
#define debug(x) cout<<x<<endl
typedef long long ll;
typedef unsigned long long ull;
inline ll read(){
ll sign = 1, x = 0;char s = getchar();
while(s > '9' || s < '0' ){if(s == '-')sign = -1;s = getchar();}
while(s >= '0' && s <= '9'){x = (x << 3) + (x << 1) + s - '0';s = getchar();}
return x * sign;
}//快读
void write(ll x){
if(x < 0) putchar('-'),x = -x;
if(x / 10) write(x / 10);
putchar(x % 10 + '0');
}
int kase,n,m;
ll a[limit]; vector<int>gra[661005],ans;
int dfn[661005],low[661005],now,id,sum[661005]; void tarjan(int s,int p)
{
dfn[s]=low[s]=++now;
int son=0;
for(int i=0;i<gra[s].size();i++)
if(!dfn[gra[s][i]])
{
tarjan(gra[s][i],s);
low[s]=min(low[s],low[gra[s][i]]);
if(low[gra[s][i]]>=dfn[s])
sum[s]++;
son++;
}
else
if(gra[s][i]!=p)
low[s]=min(low[s],dfn[gra[s][i]]);
if(p==0)
{
if(son>=2)
ans.push_back(s),sum[s]=son;
}
else
if(sum[s]>=1)
ans.push_back(s),sum[s]++;
} int main() {
#ifdef LOCAL
FOPEN;
#endif
n = read(),m = read();
rep(i,1,m){
int x= read(), y = read();
gra[x].push_back(y);
gra[y].push_back(x);
a[y]++ ; a[x]++;
}
int res = 0;
for(int i=1;i<=n;i++)
if(dfn[i]==0 ){
tarjan(i,0);
++res;
}
set<int>s;
for(auto i : ans){
s.insert(i);
}
rep(i,1,n){
if(a[i] == 0){
printf("%d ",res - 1);
}
else if(s.find(i) != s.end()){
printf("%d ",res + sum[i] - 1);
}else{
printf("%d ",res);
}
} return 0;
}

F题二分,这道题其实没那么复杂,我们每次肯定是贴着l放最合算,然后二分枚举放的组数x,每次如果组数贴着放都超过最大限制,那就不行,如果每次贴着l放都满足最低限制大L,那就可以,如果不是,那就看每个题能贡献的min(x*(r-l), ai)就行了,反正要么a[i】足够贴着r放,要么不够,然后判断下够不够x组就行了,问题大概是,1e5 * 1e9从1e14开始枚举会出现1e23的情况,ll就爆炸了,23333比赛的时候没想到这个,呜呜呜呜

#include <bits/stdc++.h>
using namespace std;
#define limit (1000000 + 5)//防止溢出
#define INF 0x3f3f3f3f
#define inf 0x3f3f3f3f3f
#define lowbit(i) i&(-i)//一步两步
#define EPS 1e-6
#define FASTIO ios::sync_with_stdio(false);cin.tie(0);
//#define ff(a) printf("%d\n",a );
#define pi(a,b) pair<a,b>
#define rep(i, a, b) for(ll i = a; i <= b ; ++i)
#define per(i, a, b) for(ll i = b ; i >= a ; --i)
#define MOD 998244353
#define traverse(u) for(int i = head[u]; ~i ; i = edge[i].next)
#define FOPEN freopen("C:\\Users\\tiany\\CLionProjects\\acm_01\\data.txt", "rt", stdin)
#define FOUT freopen("C:\\Users\\tiany\\CLionProjects\\acm_01\\dabiao.txt", "wt", stdout)
#define debug(x) cout<<x<<endl
typedef __int128 ll;
typedef unsigned long long ull;
inline ll read(){
ll sign = 1, x = 0;char s = getchar();
while(s > '9' || s < '0' ){if(s == '-')sign = -1;s = getchar();}
while(s >= '0' && s <= '9'){x = (x << 3) + (x << 1) + s - '0';s = getchar();}
return x * sign;
}//快读
void write(ll x){
if(x < 0) putchar('-'),x = -x;
if(x / 10) write(x / 10);
putchar(x % 10 + '0');
}
int kase,n,m;
ll a[limit];
int f[limit];
ll l[limit],r[limit];
ll L,R;
bool check(ll x){
ll tot = 0;
ll sum = 0;
rep(i,1,n){
tot += l[i] * x;
if(l[i] * x > a[i])return false;
ll cancontri = min((r[i] - l[i]) * x,a[i] - l[i] * x);
sum += cancontri;
}
if(tot > R * x)return false;
return tot + sum >= L * x;
}
int main() {
#ifdef LOCAL
FOPEN;
#endif
n = read(), L = read(),R = read();
ll down;
down = 0;
rep(i,1,n){
a[i] = read();
}
rep(i,1,n){
l[i] = read();
r[i] = read();
down += l[i];
}
ll pl = 0 , pr = 1e18;
ll ans = 0;
while (pl <= pr){
ll mid = pl + (pr - pl) / 2;
if(check(mid)){
pl = mid + 1;
ans = mid;
}else{
pr = mid - 1;
}
}
//check(4);
write(ans);
return 0;
}

撒花!

小米ICPC第一场自闭记的更多相关文章

  1. NOI.AC NOIP模拟赛 第一场 补记

    NOI.AC NOIP模拟赛 第一场 补记 candy 题目大意: 有两个超市,每个超市有\(n(n\le10^5)\)个糖,每个糖\(W\)元.每颗糖有一个愉悦度,其中,第一家商店中的第\(i\)颗 ...

  2. 2020ICPC·小米 网络选拔赛第一场

    2020ICPC·小米 网络选拔赛第一场 C-Smart Browser #include <string> #include <iostream> std::string s ...

  3. PKUWC 2019 自闭记

    PKUWC 2019 自闭记 Day -1 考前天天在隔壁的物竞教室划水(雀魂,能和吉老师一起玩的游戏都是好游戏),没有做题. Day 0 早上8:16的高铁,到广州南居然要6个小时...不知道福州和 ...

  4. [ZJOI2019]游记之我的第一次省选--自闭记

    2019/3/23 day -1 今天是体育中考....(祝我好运) 实心球再次投出测量范围,虽然成绩是10.5,但是目测有15米. 立定跳远2.70,好近,我爸叫我跳2.8的QwQ. 1000米最后 ...

  5. 【杂文】NOIP2018 蒟蒻自闭记

    [杂文]NOIP2018 蒟蒻自闭记 都 \(9102\) 年了,谁还记得 \(2018\) 年的事啊 \(QAQ\) . 还有两个月就要去参加首届 \(CSP\) 了. 想着如果再不记下去年那些事儿 ...

  6. JOISC2020 自闭记

    以下是我考场上的思路,很多题都不是正解.对于某些题目,我们使用<代码部落>中的题解,希望大家能够看懂 JOISC2020 Round1 自闭记 T1 11 pts 算法:考虑\(DP\). ...

  7. 校省选赛第一场C题解Practice

    比赛时间只有两个小时,我没有选做这题,因为当时看样例也看不懂,比较烦恼. 后来发现,该题对输入输出要求很低.远远没有昨天我在做的A题的麻烦,赛后认真看了一下就明白了,写了一下,一次就AC了,没问题,真 ...

  8. 校省选赛第一场A题Cinema题解

    今天是学校省选的第一场比赛,0战绩收工,死死啃着A题来做,偏偏一直WA在TES1. 赛后,才发现,原来要freopen("input.txt","r",stdi ...

  9. 计蒜之道 初赛第一场B 阿里天池的新任务(简单)

    阿里“天池”竞赛平台近日推出了一个新的挑战任务:对于给定的一串 DNA 碱基序列 tt,判断它在另一个根据规则生成的 DNA 碱基序列 ss 中出现了多少次. 首先,定义一个序列 ww: \displ ...

随机推荐

  1. linux查看日志的几种方法

    linux 日志查看 tail.head. cat.tac.sed.less.echo 1.命令格式: tail       [必要参数]     [选择参数]     [文件] -f 循环读取 -q ...

  2. .NetCore简单封装基于IHttpClientFactory的HttpClient请求

    IHttpClientFactory是什么?为什么出现了IHttpClientFactory 一.IHttpClientFactory是什么? IHttpClientFactory是.netcore2 ...

  3. visual c++6.0使用VA注意事项

    visual c++6.0使用VA时配置: (1)因为VA安装时会自动检索MSDEV.exe:如果V6安装在XP或者win7系统上,直接安装,添加addin即可: (2)但是如果安装在win8上,V6 ...

  4. 16、Auth认证组件

    1 Auth模块是什么 Auth模块是Django自带的用户认证模块: 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码 ...

  5. C#/VB.NET 给Excel添加、删除数字签名

    一.程序环境 以下内容通过C#及VB.NET代码demo示例介绍如何给Excel文档添加数字签名,以及删除Excel文档中已有的数字签名.工具使用最近发布的Spire.XLS for .NET 版本1 ...

  6. Boost.Accumulators累加器的简单使用

    Boost.Accumulators是一个累加器,实现的功能很简单,就是对一组数据进行操作,然后可以得到一些特征数据. 由于累加器默认不对数据进行储存操作,所以不能把它作为一个简单的容器使用. 简单使 ...

  7. Windows平台Python Pyramid实战从入门到进阶:第一个服务

    Pyramid是比较流行的Python Web 框架,比较灵活,功能也很强大.最近项目上用到,便打算学习一下.网上教程比较少,而且很多都是针对linux平台的,我是windows土著所以对那些linu ...

  8. Java 内功修炼 之 数据结构与算法(二)

    一.二叉树补充.多叉树 1.二叉树(非递归实现遍历) (1)前提 前面一篇介绍了 二叉树.顺序二叉树.线索二叉树.哈夫曼树等树结构. 可参考:https://www.cnblogs.com/l-y-h ...

  9. martini-能量最小化参数(mdp文件)

    1 ; 2 ; STANDARD MD INPUT OPTIONS FOR MARTINI 2.x 3 ; Updated 02 feb 2013 by DdJ 4 ; 5 ; for use wit ...

  10. 分库分表神器 Sharding-JDBC,几千万的数据你不搞一下?

    今天我们介绍一下 Sharding-JDBC框架和快速的搭建一个分库分表案例,为讲解后续功能点准备好环境. 一.Sharding-JDBC 简介 Sharding-JDBC 最早是当当网内部使用的一款 ...