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

昨天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. Zookeeper源码(启动+选举)

    简介 关于Zookeeper,目前普遍的应用场景基本作为服务注册中心,用于服务发现.但这只是Zookeeper的一个的功能,根据Apache的官方概述:"The Apache ZooKeep ...

  2. LSV又新增13个地质图!量测对比分析全都能搞定

    对于地质工作者来说,地质图是个十分重要的参考资料.随着国家解密的地质资料越来越多,能够有效的把各种地质资料结合起来,进而提高地质工作者的作业效率,是十分有意义的. LSV(LocaSpaceViewe ...

  3. JNI-从jvm源码分析Thread.interrupt的系统级别线程打断原理

    前言 在java编程中,我们经常会调用Thread.sleep()方法使得线程停止运行一段时间,而Thread类中也提供了interrupt方法供我们去主动打断一个线程.那么线程挂起和打断的本质究竟是 ...

  4. offsetWidth与offsetHeight

    HTMLElement.offsetWidth 是一个只读属性,返回一个元素的布局宽度.一个典型的(译者注:各浏览器的offsetWidth可能有所不同)offsetWidth是测量包含元素的边框(b ...

  5. Socket 套接字的系统调用

    socket 结构 /** * struct socket - general BSD socket * @state: socket state (%SS_CONNECTED, etc) * @ty ...

  6. 【JVM】肝了一周,吐血整理出这份超硬核的JVM笔记(升级版)!!

    写在前面 最近,一直有小伙伴让我整理下关于JVM的知识,经过十几天的收集与整理,初版算是整理出来了.希望对大家有所帮助. JDK 是什么? JDK 是用于支持 Java 程序开发的最小环境. Java ...

  7. python之迭代锁与信号量

    如果现在需要在多处加锁大于等于2的时候 因为计算机比较笨,当他锁上一把锁的时候又所理一把锁,等他来开锁的时候他不知道用哪把钥匙来开锁, 所以这个时候我们需要把把平常的锁变为迭代锁 eg: import ...

  8. asp.net core 使用 TestServer 来做集成测试

    asp.net core 使用 TestServer 来做集成测试 Intro 之前我的项目里的集成测试是随机一个端口,每次都真实的启动一个 WebServer,之前也有看到过微软文档上 TestSe ...

  9. SQL Server 常用近百条SQL语句(收藏版)

    1. sqlserver查看实例级别的信息,使用SERVERPROPERTY函数 select SERVERPROPERTY ('propertyname') 2. 查看实例级别的某个参数XX的配置 ...

  10. Vue 组件化开发之插槽

    插槽的作用 相信看过前一篇组件化开发后,你对组件化开发有了新的认识. 插槽是干什么的呢?它其实是配合组件一起使用的,让一个组件能够更加的灵活多变,如下图所示,你可以将组件当作一块电脑主板,将插槽当作主 ...