Codeforces Round #835 (Div. 4)(E , F , G 补)
创始人
2024-02-08 18:19:26
0

E:

大意: 一个 01序列 , 一种操作是改变其中一个数 ,求最多操作一次序列的最大的逆序对个数
01序列的逆序对就是统计每个 0 前面 1 的个数
当我们把 0 -> 1 的时候 , 贡献变化就是 后边 0 的个数 - 前面 1 的个数
当我们把 1 -> 0 的时候 , 贡献变化就是 前边 1 的个数 - 后边 0 的个数
线性的维护一下就好

本题的坑点在于有可能原序列的逆序对个数最大 , 即不做改变 , 比较一下即可

F

n 个事件 , 每个事件贡献是 aia_iai​ , k 是间隔天数 , 表示两个相同的事件间隔多少天完成 , c , d 表示需要 d 天 获得 c 的贡献 , 求最大的 k

考虑二分答案 , 为了使间隔天数尽可能大 , 我们优先放贡献大的事件

#include
using namespace std;
#define fi first
#define se second
#define int long long
#define IOS std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
const int N = 2e5+10;
const int p = 1e9 + 7;
typedef pairPII;
const int inf = 1e9 + 10;
const double eps = 1e-9;int t , a[N] , n , c , d , maxx;
bool cmp(int a,int b){ return a > b; }signed main(){IOScin >> t;	while(t--){cin >> n >> c >> d;for(int i=0;icin >> a[i] ;}sort(a,a+n,cmp);int l = 0 , r = d;		while(l <= r){int mid = (l + r) / 2 , sum = 0;for(int i=0;iint id = i % (mid + 1);if(id < n) sum += a[id];//这里一定注意间隔区间和数组区间的关系 }if(sum >= c) l = mid + 1;else r = mid - 1;}int id = l - 1;if(id == d){cout << "Infinity\n";}else if(id == -1){cout << "Impossible\n";}else{cout << id << "\n" ;}}return 0;
}

注意二分的边界就是另外两种情况 , 不再去特判;

G:

一个无向图 , 路径都是带权路径 , 一个人要从 A -> B
在 A 点的初始值为 0 , 每到达一个新的点都要把值亦或上路径的权值 , 想要进入B , 需要在进入B后初始值重新归0 , 这个人可以传送一次 , 传送到任何一个点(除B外)

思路:首先我们不知道从A走到哪里 , 其次我们不知道传送到哪里然后走到B , 但是我们知道这两条路径的异或和相等
思路就是从 A 开始枚举所有能走的点 , 记录路径异或值 , 然后再从B开始枚举所有能走的点 , 找有没有跟之前一样的即可

坑点:有可能从A不走直接传送 , 所以初始的 0 也算一条路径 , 也应该记录下来

#include
using namespace std;
#define fi first
#define se second
#define int long long
#define IOS std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
const int N = 2e5+10;
const int p = 1e9 + 7;
typedef pairPII;
const int inf = 1e9 + 10;
const double eps = 1e-9;int n , a , b , t; 
vectorve[N];
bool vis[N];
mapmp;
bool f = 0;void dfs1(int st ,int pre ,int now){for(auto [x,y] : ve[st]){if(x == pre || x == b) continue;mp[now ^ y] = 1;dfs1(x , st , now ^ y);}
}void dfs2(int st , int pre , int now){if(f) return ;for(auto [x,y] : ve[st]){if(x == pre) continue;if(mp[now ^ y]){f = 1;return ;} dfs2(x , st , now ^ y);}}signed main(){IOScin >> t;while(t--){cin >> n >> a >> b;for(int i=1;i<=n;i++) ve[i].clear();	mp.clear();      f = 0;mp[0] = 1;for(int i=1;i<=n-1;i++){int u , v , w;cin >> u >> v >> w;ve[u].emplace_back(v,w);ve[v].emplace_back(u,w);}dfs1(a,a,0);dfs2(b,b,0);if(f) cout << "Yes\n";else cout << "No\n";}return 0;
}

相关内容

热门资讯

保存时出现了1个错误,导致这篇... 当保存文章时出现错误时,可以通过以下步骤解决问题:查看错误信息:查看错误提示信息可以帮助我们了解具体...
汇川伺服电机位置控制模式参数配... 1. 基本控制参数设置 1)设置位置控制模式   2)绝对值位置线性模...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
表格中数据未显示 当表格中的数据未显示时,可能是由于以下几个原因导致的:HTML代码问题:检查表格的HTML代码是否正...
本地主机上的图像未显示 问题描述:在本地主机上显示图像时,图像未能正常显示。解决方法:以下是一些可能的解决方法,具体取决于问...
表格列调整大小出现问题 问题描述:表格列调整大小出现问题,无法正常调整列宽。解决方法:检查表格的布局方式是否正确。确保表格使...
不一致的条件格式 要解决不一致的条件格式问题,可以按照以下步骤进行:确定条件格式的规则:首先,需要明确条件格式的规则是...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...