Codeforces Round #497 (Div. 1)

Codeforces Round #497 (Div. 1)


A. Reorder the Array

先满足数值较小的位置,每次找恰好大于这个值的一个值即可。

#include <bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define pb push_back
typedef long long ll;
const int N = 100200;
using namespace std;
struct node{int id,x;node(){}node(int a,int b){id=a;x=b;}bool operator < (const node a)const {return x < a.x;}
};
int n,a[N],b[N];
vector<node> v;
vector<int> v2;
multiset<node> s;
//map<int,int> M;
int main() {scanf("%d",&n);rep(i,1,n) {scanf("%d",&a[i]);v.pb(node(i,a[i])); // **先满足最小的s.insert(node(i,a[i])); // **查找现存元素中恰好比它大的//++M[a[i]];}int ans=0;sort(v.begin(),v.end());
//    for(auto tx: v) printf("%d %d\n",tx.id,tx.x);puts("");
//    for(auto tx: s) printf("%d %d\n",tx.id,tx.x);puts("");for(int i=0;i<v.size();++i) {node t = v[i];//printf("%d %d --> ",t.id,t.x);set<node>::iterator it = s.upper_bound(t);if(it!=s.end()) {b[t.id] = (*it).x; //printf("%d %d",(*it).id,(*it).x);//--M[(*it).x];++ans;s.erase(it);}//puts("");}printf("%d\n",ans);return 0;
}

B. Pave the Parallelepiped

比赛时,只推出了几种特殊情况的规律。下来学习了一下,将 A, B, C 的所有约数分类为只在A中,只在B中,只在 C 中,只在 AB 中,等7种类别。枚举a, b, c分别属于哪个类别,同时保证要包含A,B,C的约数。计算时,有三个不同的类别,两个类别相同一个不同,三种相同的。在一个类别内,要挑出2个约数时,有两种情况相同或不同,要挑出3个约数时,有3种情况,各不相同,有两个相同,三个相同,分别计算。这题确实学到很多,讨论能力太差了,从一开始就找规律思考一点都不深入。

#include <bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define pb push_back
typedef long long ll;
const int N = 100200;
using namespace std;
int n,p[N],notp[N],d[N];
int cal_p(int x) {int ans=1;for(int i=2;i*i<=x;++i)if(x%i==0){int tmp=0;while(x%i==0)x/=i,++tmp;ans*=(tmp+1);}if(x>1)ans*=2;return ans;
}
vector<int> va,vb,vc;
int A = 1, B = 2, C = 4, AB = 3, BC = 6, AC = 5, ABC = 7;//000 : BCA
void init() {notp[1]=1;d[1]=1;for(int i=2;i<=100000;++i) {if(!notp[i])p[++p[0]] = i,d[i] = 2;for(int j=1;j<=p[0]&&p[j]*i<=100000;++j) {notp[i*p[j]]=1;if(i%p[j]==0) {d[i*p[j]] = cal_p(i*p[j]);break;}d[i*p[j]] = d[i]*d[p[j]];}}va.pb(A),va.pb(AB),va.pb(AC),va.pb(ABC);vb.pb(B),vb.pb(AB),vb.pb(BC),vb.pb(ABC);vc.pb(C),vc.pb(BC),vc.pb(AC),vc.pb(ABC);
}
int a[5];
ll C3(ll x) {return x + x*(x-1)/2*2 + x*(x-1)*(x-2)/6LL;}
ll C2(ll x) {return x + x*(x-1)/2LL;}
int num[N],vis[N];
int main() {init();scanf("%d",&n);rep(ti,1,n) {int AA,BB,CC;scanf("%d%d%d",&AA,&BB,&CC);int gab = __gcd(AA,BB), gbc = __gcd(BB,CC), gac = __gcd(AA,CC);int gabc = __gcd(gab,CC);num[ABC] = d[gabc];num[AB] = d[gab] - num[ABC];num[AC] = d[gac] - num[ABC];num[BC] = d[gbc] - num[ABC];num[A] = d[AA] - num[AB] - num[AC] - num[ABC];num[B] = d[BB] - num[AB] - num[BC] - num[ABC];num[C] = d[CC] - num[AC] - num[BC] - num[ABC];ll ans = 0;for(int i=0;i<va.size();++i)for(int j=0;j<vb.size();++j)for(int k=0;k<vc.size();++k) {a[0] = va[i];a[1] = vb[j];a[2]=vc[k];sort(a,a+3);if(vis[a[0]*100+a[1]*10+a[2]])continue;vis[a[0]*100+a[1]*10+a[2]]=1;if(a[0]==a[1]&&a[1]==a[2]) ans+=1LL*C3(num[a[0]]);else if(a[0]==a[1]) ans+=1LL*num[a[2]]*C2(num[a[0]]);else if(a[1]==a[2]) ans+=1LL*num[a[0]]*C2(num[a[1]]);else ans+=1LL*num[a[0]]*num[a[1]]*num[a[2]];}for(int i=0;i<va.size();++i)for(int j=0;j<vb.size();++j)for(int k=0;k<vc.size();++k) {a[0] = va[i];a[1] = vb[j];a[2]=vc[k];sort(a,a+3);vis[a[0]*100+a[1]*10+a[2]]=0;}printf("%I64d\n",ans);}return 0;
}

转载于:https://www.cnblogs.com/RRRR-wys/p/9329627.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/320701.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jzoj6824-[2020.10.17提高组模拟]英雄联盟【期望】

正题 题目大意 开始暴击率为xxx&#xff0c;每次失败后都会增加xxx&#xff0c;成功后重置&#xff0c;然后求攻击1010610^{10^6}10106次后的暴击次数除以1010610^{10^6}10106 解题思路 定义ansansans为期望攻击多少次后暴击&#xff0c;然后答案为1ans\frac{1}{ans}ans1​。…

【模拟】桐桐的游戏

桐桐的游戏 题目大意&#xff1a; 有一个用数组成的环要从1跳到z&#xff08;有些点不能跳&#xff09;&#xff0c;每次跳的步数最少有多少步 原题&#xff1a; 题目描述 桐桐最近在玩一个跳棋游戏&#xff0c;规则是&#xff1a;有个圆圈&#xff0c;分成N等分&#xff…

ASP.NET Core 应用发布与部署指南

一、前言本篇主要包含哪些内容&#xff1f;将项目发布到本地目录将项目传输到服务器并配置启动&开机自动启动将Nginx作为访问入口&#xff0c;配置反向代理本篇环境信息开发环境&#xff1a;用途工具&版本操作系统Windows 10开发工具Visual Studio 2017&#xff08;15.…

jzoj6826-[2020.10.17提高组模拟]隔膜【博弈论】

正题 题目大意 n∗nn*nn∗n的矩形&#xff0c;每一个人操作时如果棋盘上有一个k∗kk*kk∗k的矩形空地就可以选择一个点堵上。如果没有就失败了&#xff0c;求必胜方。 解题思路 如果场地上有一个位置堵上后即可堵上所有k∗kk*kk∗k的矩形那么这个点被堵住后就赢了&#xff0c;…

牛客网暑期ACM多校训练营(第一场)

牛客网暑期ACM多校训练营&#xff08;第一场&#xff09; A. Monotonic Matrix 考虑0和1的分界线&#xff0c;1和2的分界线&#xff0c;发现问题可以转化为两条不互相穿过的路径的方案数&#xff08;可重叠&#xff09;&#xff0c;题解的做法就是把一条路径斜着平移&#xff0…

2014 ACM/ICPC Asia Regional Xi'an Online

2014西安网络赛 A. Post Robot 把每种单词都kmp跑一遍&#xff0c;顺序输出即可 #include <cstdio> #include <iostream> #include <algorithm> #include <map> #include <cstring> #include <cmath> #include <queue> #include <…

MongoDB发布4.0版本,支持ACID事务

MongoDB最近发布了最新的4.0版本。毫无疑问&#xff0c;这一版本的主要特性是支持多文档ACID事务。MongoDB向与关系型数据库产品的融合迈出了一大步&#xff0c;现在支持会话的概念&#xff0c;并可以使用start_transaction()和commit_transaction()方法将多个数据库命令包含在…

P5491-[模板]二次剩余

正题 题目链接:https://www.luogu.com.cn/problem/P5491 题目大意 求解x2N(modP)x^2N(mod\ \ P)x2N(mod P) 解题思路 若aaa在模ppp意义下可以开根那么aaa就是ppp的二次剩余&#xff0c;定义 (ap){1(a是p的二次剩余)−1(a是p的二次非剩余)0(p∣a)\binom{a}{p}\left\{\begin{…

【递归】桐桐的递归函数

桐桐的递归函数 题目大意&#xff1a; 有一个函数&#xff0c;让你照着打 原题&#xff1a; 题目描述 桐桐经常找一些很有趣的数学书来阅读以增长自己的数学知识。一天&#xff0c;他偶然发现一个递归函数w&#xff08;a&#xff0c;b&#xff0c;c&#xff09;有以下性质…

分享我编程工作经历及对软件开发前景的看法

本人一直从事互联网行业&#xff0c;熟练C#、javascript,熟悉C\C,JAVA,php,object-c,熟练的开发工具有Visual Studio,数据库是MS SQL SERVER。这两天实在是无聊&#xff0c;回忆一下本人的工作经历&#xff0c;一路走来很辛苦&#xff0c;很坎坷&#xff0c;现在都快40岁了&…

P4026-[SHOI2008]循环的债务【dp】

正题 题目链接:https://www.luogu.com.cn/problem/P4026 题目大意 333个人&#xff0c;有一些面值为100,50,20,10,5,1100,50,20,10,5,1100,50,20,10,5,1的钱&#xff0c;一些人欠一些人钱&#xff0c;求最少交换多少张钞票可以还清。 解题思路 我们设fi,j,kf_{i,j,k}fi,j,k​…

【模拟】桐桐的新闻系统

桐桐的新闻系统 题目大意&#xff1a; 有n个人&#xff0c;每个人有自己的ID和收新闻的间隔&#xff0c;问前k次发送新闻是分别发给谁的 原题&#xff1a; 题目描述 桐桐为期末的电脑作业设计一套新闻系统&#xff0c;他把这套系统称为Argus。 使用这套系统的用户可以向这…

实体类的动态生成(三)

前言在 .NET 中主要有两种动态生成并编译的方式&#xff0c;一种是通过 System.Linq.Expressions 命名空间中的 LambdaExpression 类的 CompileToMethod(...) 方法&#xff0c;但是这种方法只支持动态编译到静态方法&#xff0c;因为这个限制我们只能放弃它而采用 Emitting 生成…

牛客网暑期ACM多校训练营(第三场)

牛客网暑期ACM多校训练营&#xff08;第三场&#xff09; A. PACM Team 01背包&#xff0c;输出方案&#xff0c;用bool存每种状态下用的哪一个物品&#xff0c;卡内存。官方题解上&#xff0c;说用char或者short就行了。还有一种做法是把用的物品压成一个int。 #include <b…

P4096-[HEOI2013]Eden的博弈树

正题 题目链接:https://www.luogu.com.cn/problem/P4096 题目大意 一个博弈树&#xff0c;黑方先手。定义一个最小的叶子节点集为黑胜状态为黑方胜利集合&#xff0c;白色亦然。求所有既属于黑方胜利集合有属于白方胜利集合的点。 解题思路 设fi,0/1f_{i,0/1}fi,0/1​表示ii…

【DP】数字编码

数字编码 题目大意&#xff1a; 有一个序列&#xff0c;可以把它分为一些子序列&#xff0c;但要按题意用字符串表示出来&#xff0c;现在要求字符串的字符最小是多少 原题&#xff1a; 题目描述 一列有顺序的非负整数&#xff0c;需要把它们编码成一个0、10、10、1字符串…

NOIP2013货车运输

NOIP2013货车运输 题目描述 A 国有 n 座城市&#xff0c;编号从 1 到 n&#xff0c;城市之间有 m 条双向道路。每一条道路对车辆都有重量限制&#xff0c;简称限重。现在有 q 辆货车在运输货物&#xff0c;司机们想知道每辆车在不超过车辆限重的情况下&#xff0c;最多能运多重…

52ABP模板 ASP.Net Core 与 Angular的开源实例项目

阅读文本大概需要 5 分钟。开始之前自从上一篇文章".NET:持续进化的统一开发平台"发布后&#xff0c;已经有三个月的时间没有写过文章了。这段时间&#xff0c;做了两场线下活动&#xff0c;一场在上海&#xff0c;一场在成都。 中途顺带去参加了微软的人工智能的ope…

jzoj1281-旅行【dp】

正题 题目大意 nnn个地方&#xff0c;第iii个高度为hih_ihi​。每次可以交换一个hjh_jhj​和hj1h_{j1}hj1​但是要满足操作的jjj递增。 解题思路 也就是可以选择若干个区间&#xff0c;然后将区间的头部丢到尾部。 发现dpdpdp的瓶颈在于我们在枚举下一个时无法知道上一个的具…

初一模拟赛总结(2019.6.15)

成绩&#xff1a; 注&#xff1a;T1好像因为精度问题&#xff0c;有一些本地对的代码交上去WA了 rankrankranknamenamenamescorescorescoreT1T1T1T2T2T2T3T3T3T4T4T4T5T5T5111lyflyflyf320320320202020100100100100100100100100100000222hkyhkyhky298298298989898100100100100…