A - Fence

把凑得那条边当成最长的边,如果a+b+c=d那么将会共线,只要稍微a+b+c大一点即可满足四边形。

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#include<set>
#include<map>
#include<cmath>
#include<queue>
#include<string>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<unordered_map>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int N=100010;
const ll mod=998244353;
int main()
{IO;int T=1;cin>>T;while(T--){ll a,b,c;cin>>a>>b>>c;cout<<a+b+c-1<<'\n';}return 0;}

B - Nice Matrix

不难发现由于需要满足回文有以下关系:
a(i,j)=a(n−i+1,j)=a(i,m−j+1)=a(n−i+1,m−j+1)a_{(i,j)}=a_{(n-i+1,j)}=a_{(i,m-j+1)}=a_{(n-i+1,m-j+1)}a(i,j)​=a(n−i+1,j)​=a(i,m−j+1)​=a(n−i+1,m−j+1)​
单独考虑这四元组,需要找到xxx使得∣x−a(i,j)∣+∣x−a(n−i+1,j)∣+∣x−a(i,m−j+1)+∣x−a(n−i+1,m−j+1)∣|x-a_{(i,j)}|+|x-a_{(n-i+1,j)}|+|x-a_{(i,m-j+1)}+|x-a_{(n-i+1,m-j+1)}|∣x−a(i,j)​∣+∣x−a(n−i+1,j)​∣+∣x−a(i,m−j+1)​+∣x−a(n−i+1,m−j+1)​∣最小,只需要找中位数即可。

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#include<set>
#include<map>
#include<cmath>
#include<queue>
#include<string>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<unordered_map>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int N=110;
const ll mod=998244353;
ll a[N][N];
int n,m;
ll tmp[5];
ll calc(ll a,ll b,ll c,ll d)
{ll res=0;tmp[1]=a,tmp[2]=b,tmp[3]=c,tmp[4]=d;sort(tmp+1,tmp+1+4);ll mid=tmp[2];return abs(a-mid)+abs(b-mid)+abs(c-mid)+abs(d-mid);}
int main()
{IO;int T=1;cin>>T;while(T--){   cin>>n>>m;for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)   cin>>a[i][j];ll res=0;int rmid=1+n>>1,cmid=1+m>>1;if(n&1){for(int j=1;j<=cmid;j++){ll mid=a[rmid][j]+a[rmid][m-j+1]>>1;res+=abs(a[rmid][j]-mid)+abs(a[rmid][m-j+1]-mid);}rmid--;}if(m&1){for(int i=1;i<=rmid;i++){ll mid=a[i][cmid]+a[n-i+1][cmid]>>1;res+=abs(a[i][cmid]-mid)+abs(a[n-i+1][cmid]-mid);}cmid--;}for(int i=1;i<=rmid;i++)for(int j=1;j<=cmid;j++)res+=calc(a[i][j],a[i][m-j+1],a[n-i+1][j],a[n-i+1][m-j+1]);cout<<res<<'\n';}return 0;
}

C - Bargain

单独考虑每位的对答案的贡献:
某位想要有贡献那么首先该位不能被删除,因而选择删除的子串只可能有两种情况:①该位前面②该位后面
不妨设第iii位的数是ddd(iii从高位)
如果去掉的子串在该位前面,则贡献为:i(i−1)2d×10n−i\frac{i(i-1)}{2}d×10^{n-i}2i(i−1)​d×10n−i
如果去掉的子串在该位后面,则贡献为:d∑j=1n−jj×10j−1d\sum_{j=1}^{n-j}j×10^{j-1}d∑j=1n−j​j×10j−1

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#include<set>
#include<map>
#include<cmath>
#include<queue>
#include<string>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<unordered_map>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int N=100010;
const ll mod=1e9+7;
char s[N];
int n;
int main()
{IO;int T=1;//cin>>T;while(T--){   cin>>s+1;n=strlen(s+1);ll p=1,sum=0,res=0;for(int i=n;i;i--){ll d=s[i]-'0';res=(res+1ll*i*(i-1)/2%mod*d%mod*p%mod)%mod;res=(res+1ll*sum*d)%mod;sum=(sum+1ll*(n-i+1)*p)%mod;p=p*10%mod;}cout<<res<<'\n';}return 0;}

D - Returning Home

Heltion大佬题解
第一次见这种建图方式,行列建图,如果(i,j)(i,j)(i,j)是一个特殊点那么在第iii行的任意位置即可0代价到达(i,j)(i,j)(i,j)即到达了第jjj列,同理第jjj列的任意位置即可0代价到达(i,j)(i,j)(i,j)即到达了第iii行。然后参考上述题解即可

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#include<set>
#include<map>
#include<cmath>
#include<queue>
#include<string>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<unordered_map>
using namespace std;
typedef long long ll;
typedef pair<ll,int> pli;
const int N=200010,M=2*N;
const ll mod=1e9+7;
const ll INF=1e17;
int n,m;
int sx,sy,fx,fy;
vector<int> dx,dy;
int x[N],y[N];
ll d[N];
int h[N],e[M],ne[M],idx;
bool st[N];
void add(int a,int b)
{e[idx]=b;ne[idx]=h[a];h[a]=idx++;
}
int find(vector<int> &mp,int x)//无引用直接TLE
{return lower_bound(mp.begin(),mp.end(),x)-mp.begin()+1;
}
void dijkstra()
{priority_queue<pli,vector<pli>,greater<pli>> q;for(int i=1;i<=2*m;i++)if(d[i]!=INF)q.push({d[i],i});while(q.size()){int t=q.top().second;q.pop();if(st[t]) continue;st[t]=1;for(int i=h[t];i!=-1;i=ne[i]){int j=e[i];if(d[j]>d[t])q.push({d[j]=d[t],j});}// 四个方向// 行移动if(1<=t&&t<=dx.size()){if(t+1<=dx.size()&&d[t+1]>d[t]+dx[t]-dx[t-1]){d[t+1]=d[t]+dx[t]-dx[t-1];q.push({d[t+1],t+1});}if(1<t&&d[t-1]>d[t]+dx[t-1]-dx[t-2]){d[t-1]=d[t]+dx[t-1]-dx[t-2];q.push({d[t-1],t-1});}}// 列移动if(m<t&&t<=dy.size()+m){if(t+1<=dy.size()+m&&d[t+1]>d[t]+dy[t-m]-dy[t-1-m]){d[t+1]=d[t]+dy[t-m]-dy[t-1-m];q.push({d[t+1],t+1});}if(m+1<t&&d[t-1]>d[t]+dy[t-1-m]-dy[t-2-m]){d[t-1]=d[t]+dy[t-1-m]-dy[t-2-m];q.push({d[t-1],t-1});}}}
}
int main()
{IO;int T=1;//cin>>T;while(T--){   cin>>n>>m;cin>>sx>>sy>>fx>>fy;memset(h,-1,sizeof h);for(int i=1;i<=m;i++){d[i]=d[i+m]=INF;// 初始化cin>>x[i]>>y[i];dx.push_back(x[i]);dy.push_back(y[i]);}// 离散化坐标sort(dx.begin(),dx.end());sort(dy.begin(),dy.end());dx.erase(unique(dx.begin(),dx.end()),dx.end());dy.erase(unique(dy.begin(),dy.end()),dy.end());for(int i=1;i<=m;i++){int u=find(dx,x[i]);int v=find(dy,y[i]);add(u,m+v);add(m+v,u);d[u]=min(d[u],(ll)abs(sx-x[i]));d[m+v]=min(d[m+v],(ll)abs(sy-y[i]));}dijkstra();ll res=abs(sx-fx)+abs(sy-fy);for(int i=1;i<=m;i++){int u=find(dx,x[i]);res=min(res,abs(fx-x[i])+abs(fy-y[i])+d[u]);}cout<<res<<'\n';}return 0;}

F - Boring Queries

静态版本题解都看不懂的渣渣,先标记一下,以后会了补!

最近数电信号要顶不住了啊啊啊啊啊
要加油哦!!!

Codeforces Round #675 (Div. 2)——F主席树待补?相关推荐

  1. Codeforces Round #675 (Div. 2) F. Boring Queries 区间lcm + 主席树

    传送门 文章目录 题意: 思路: 题意: 给你一个长度为nnn的序列aaa,qqq个询问,每次询问[l,r][l,r][l,r]内的lcmlcmlcm是多少,对1e9+71e9+71e9+7取模. n ...

  2. Codeforces Round #699 (Div. 2) F - AB Tree(贪心、树上DP)超级清晰,良心题解,看不懂来打我 ~

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #699 (Div. 2) F - AB Tree Problem ...

  3. codeforces Round #675 (Div. 2) 1422C Bargain

    题目链接 题目翻译: 有时候想在讲价上达成一致不是一件容易的事.现在Sasha和Vova就没法达成一致:Sasha出了一个尽可能高的价格,然后Vova想要从中去除尽可能多的数字.说得更详细一些,Sas ...

  4. Codeforces Round #644 (Div. 3) F.Spy-string

    Codeforces Round #644 (Div. 3) F.Spy-string 题目链接 You are given n strings a1,a2,-,an: all of them hav ...

  5. Codeforces Round #849 (Div. 4) F. Range Update Point Query

    Codeforces Round #849 (Div. 4) F. Range Update Point Query 题目大意: 给一串数字,有两个操作: 操作1:将 l − r l-r l−r 的数 ...

  6. Codeforces Round #740 (Div. 2) F. Top-Notch Insertions 线段树 / 平衡树 + 组合数学

    传送门 文章目录 题意: 思路: 题意: 思路: 考虑最终的序列是什么鸭子的,首先序列肯定单调不降,也就是a1≤a2≤a3≤...≤ana_1\le a_2\le a_3\le ...\le a_na ...

  7. Codeforces Round #628 (Div. 2) F. Ehab‘s Last Theorem dfs树

    传送门 文章目录 题意: 思路: 题意: 给你个nnn个点mmm条边的图,可以选择完成以下两个任务中的一个: (1)(1)(1)找出大小恰好为n\sqrt nn​的一个独立集. (2)(2)(2)找出 ...

  8. Codeforces Round #538 (Div. 2) F. Please, another Queries on Array? 线段树 + 欧拉函数

    传送门 文章目录 题意: 思路: 题意: 给你一个序列aaa,你需要实现两种操作: (1)(1)(1) 将[l,r][l,r][l,r]的aia_iai​都乘rrr. (2)(2)(2) 求ϕ(∏i= ...

  9. Codeforces Round #727 (Div. 2) F. Strange Array 线段树 + 区间合并 + 排序优化

    传送门 文章目录 题意: 思路: 题意: 给你一个长度为nnn的数组,对每个位置iii求一个最大价值,价值计算方式如下:选择一个包含iii的[l,r][l,r][l,r],让后将其拿出来排序,之后价值 ...

最新文章

  1. MySQL语法大全_自己整理的学习笔记
  2. 删除DriverStore\FileRepository文件夹后,设备驱动无法安装,提示“没有为设备信息集或元素选择驱动程序(代码 28)”的解决办法...
  3. JUC并发编程三 并发架构--线程运行原理
  4. 这家公司向苹果索赔百亿!一场鏖战八年的专利之争仍未结束
  5. NodeJs学习笔记002--npm常用命令详解
  6. 为什么坐飞机时会耳痛?
  7. python静态方法的作用_@staticmethod和@classmethod如何作用于python中的...
  8. when-to-use-rebuild-vs-coalesce-vs-shrink
  9. java 身份证地址提取籍贯_输入身份证号获取籍贯、出生日期、性别
  10. Ubuntu下bin文件的安装
  11. Matlab中凸优化工具包CVX的安装、注册与使用
  12. 在 Android Studio 里面运行标准 Java 工程
  13. python中plot线条的形状、标记符号和颜色详情
  14. javascript关于累加和的发散思维
  15. (dfs/dp)P2327 [SCOI2005]扫雷
  16. 推荐一款免费又好用的报表工具
  17. Shared Project
  18. Codeforces 19E DFS 树
  19. jmeter参数化不起效果
  20. 中南大学计算机网.doc,中南大学计算机网络课程设计报告.doc

热门文章

  1. jodconverter水印java,OpenOffice实现Office转Pdf(支持自定义添加水印、页眉、页脚)
  2. oracle拆分分区语法详解大全_Oracle hash的分区方法详解
  3. python输入日期计算天数_用python计算日期(1、返回指定日期所在的一周,2,计算一个日期的月份和天数加减)...
  4. 数字调制系统工作原理_空间光调制器工作原理是什么 空间光调制器工作原理...
  5. leetcode131. 分割回文串
  6. 101. 对称二叉树023(BFS)
  7. 7-7 硬币找钱问题 (10 分)(思路+详解+double类型数据的处理)Come baby!!!!!!!!!!!!!!!!!!!!
  8. 还不会ts?一文带你打开ts的大门
  9. 计算机一级办公软件试题,计算机一级《MS Office》练习题(含答案)
  10. [Java基础]注解概念