【CF #792 Div1+Div2】A-E
A. Digit Minimization
题目
分析
每次操作先交换两个数再删去尾端的数,使最后剩余的数最小。
直接判断这个数大于100,每次操作都可以把最小的数留到最后,只有两位数的话只能是个位的数。
代码
#include<bits/stdc++.h>
#define pb push_back
#define ll long long
#define guanliu ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
using namespace std;
const ll maxn=2e5+10;
const ll mod=1e9+7;
const ll INF=0x3f3f3f3f;
const double pi=acos(-1);int main()
{guanliu;int t;cin>>t;while(t--){int n;cin>>n;if(n/100==0){int a=n/10;int b=n%10;cout<<b<<endl;continue;}int ans=10;while(n){int tt=n%10;ans=min(ans,tt);n/=10;if(ans==1) break;}cout<<ans<<endl;}return 0;
}
B. Z mod X = C
题目
分析
给出a,b,c,找出满足x mod y = a ,y mod z = b ,z mod x = c;的x,y,z。
之前做过类似的题,先做出式子代换,代换为假设z的k为0,其余两个k相同,即可推出x和y的值。
注意:x,y,z的值需要开long long。
代码
#include<bits/stdc++.h>
#define pb push_back
#define ll long long
#define guanliu ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
using namespace std;
const ll maxn=2e5+10;
const ll mod=1e9+7;
const ll INF=0x3f3f3f3f;
const double pi=acos(-1);int main()
{guanliu;int t;cin>>t;while(t--){ll a,b,c;cin>>a>>b>>c;ll x,y,z;z=c;for(int i=0;i<=1e5;i++){y=i*c+b;x=i*y+a;;if(x%y==a&&y%z==b&&z%x==c) break;}cout<<x<<" "<<y<<" "<<z<<endl;}return 0;
}
C. Column Swapping
题目
分析
只能选择一次两列数,交换他们,使每一行的数都是非递减的。
设需要交换的列的数量为cnt:
当cnt=0,无需交换,可以直接选择交换1 1;
当cnt<=2时,尝试交换两列,并判断交换后,每行的这两列位置的数字是否已与排序后的该位置的数字相等;
当cnt>2时,那么需要交换的次数是大于1的,故无法满足要求;
这题自己手太弱了,赛时一直调不出来,赛后重写了一遍才过。
注意:数组大小2e5,数组存会爆,可以采用vector存。
代码
#include<bits/stdc++.h>
#define pb push_back
#define ll long long
#define guanliu ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
using namespace std;
const ll maxn=2e5+10;
const ll mod=1e9+7;
const ll INF=0x3f3f3f3f;
const double pi=acos(-1);
vector<int> v[maxn],vv[maxn];
int n,m;int check(int i,int j)
{for(int k=0;k<n;k++){if(v[k][i]!=vv[k][j]||v[k][j]!=vv[k][i]) return 0; }return 1;
}int main()
{guanliu;int t;cin>>t;while(t--){cin>>n>>m;for(int i=0;i<n;i++){v[i].clear();}for(int i=0;i<n;i++){for(int j=0;j<m;j++){int x;cin>>x;v[i].pb(x);}vv[i]=v[i];sort(vv[i].begin(),vv[i].end());}int ansi=-1,ansj=-1;int f=1;for(int i=0;i<n;i++){for(int j=0;j<m;j++){if(v[i][j]!=vv[i][j]){if(ansi==-1||ansi==j){ansi=j;}else if(ansj==-1||ansj==j){ansj=j;}else f=0;}}}if(!f) cout<<"-1"<<endl;else {if(ansi==-1&&ansj==-1) cout<<"1 1"<<endl;else if(check(ansi,ansj)) cout<<ansi+1<<" "<<ansj+1<<endl;else cout<<"-1"<<endl;}}return 0;
}
D. Traps
题目
分析
需要经过n个陷阱,每个陷阱的伤害是a[i],有k次跳过陷阱的机会,但是一旦跳过一个陷阱之后,这个陷阱之后的每一个陷阱的伤害+1,求通过n个陷阱受到的最小伤害值。
先记录每个陷阱被跳过对总值的影响(不考虑跳过陷阱之间的影响)a[i]-(n-i)。再考虑跳过陷阱之后对其他陷阱的伤害值的影响,跳过m个陷阱,会使伤害减少m(因为跳过一个会让之后的陷阱伤害+1,并且我计算影响时计算了这个值,这个时候跳过,需要减去这个值)。
计算出每个独立跳过的伤害值,并从大到小跳过陷阱,再比较这个值与跳过陷阱个数,考虑继不继续跳过陷阱,一旦这个值小于,即不跳过任何陷阱,即此时伤害最小。
代码
#include<bits/stdc++.h>
#define pb push_back
#define ll long long
#define guanliu ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
using namespace std;
const ll maxn=2e5+10;
const ll mod=1e9+7;
const ll INF=0x3f3f3f3f;
const double pi=acos(-1);
ll a[maxn];bool cmp(ll a,ll b)
{return a>b;
}int main()
{guanliu;int t;cin>>t;while(t--){ll sum=0;int n,k;cin>>n>>k;for(int i=1;i<=n;i++){cin>>a[i];sum+=a[i];a[i]=a[i]-(n-i);}sort(a+1,a+1+n,cmp);for(int i=1;i<=k;i++){if(a[i]>-i){sum-=a[i]+i-1;}else break;}cout<<sum<<endl; }return 0;
}
E. MEX vs DIFF
题目
分析
一个数组a,经过最多k次将a[i]换为任意的非负整数,求最小的DIFF-MEX值。
DIFF:数组中不同数的个数。
MEX:数组中没有出现的最小的数。
为使最后差值最小,考虑使MEX值最大,令大于mex的不同数的个数尽量小:muitiset维护一下,让大于mex的数中,数量较少的数优先进行改变操作。
附上本题参考的题解
代码
#include<bits/stdc++.h>
#define pb push_back
#define ll long long
#define guanliu ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
using namespace std;
const ll maxn=1e5+10;
const ll mod=1e9+7;
const ll INF=0x3f3f3f3f;
const double pi=acos(-1);
int a[maxn];
int n,k;
map<int,int> mp,dmp;int main()
{guanliu;int t;cin>>t;while(t--){mp.clear();cin>>n>>k;for(int i=1;i<=n;i++){cin>>a[i];mp[a[i]]++;}dmp=mp;sort(a+1,a+1+n);int mex=0;while(mp[mex]){mex++;}for(int i=n,j=k;i&&j;i--,j--){if(a[i]<mex) break;mp[mex]=1;mp[a[i]]--;while(mp[mex]){mex++;}}multiset<int> s;for(auto i : dmp){if(i.first>mex) {s.insert(i.second);}}int dif=mex;for(auto i : s){if(k>=i) k-=i;else dif++;}cout<<dif-mex<<endl;}return 0;
}
【CF #792 Div1+Div2】A-E相关推荐
- 【Codeforces #167 Div1 Div2】Solutions
[A. Dima and Friends] http://www.codeforces.com/contest/272/problem/A 题目大意:n+1个人出手指头,加起来再做类似约瑟夫的出圈,问 ...
- 【CF 应用开发大赛】瑞文代码推土机
2019独角兽企业重金招聘Python工程师标准>>> 应用名称:瑞文代码推土机 应用URL地址:http://qun.qzone.qq.com/group#!/254175050/ ...
- 【TopCoder SRM 551 Div2】Solutions
[250] Beaver Bindu has some colored bricks. Each color is described by an uppercase letter. Bricks o ...
- 【代码源 Div1 - 102】#323. 最长因子链(dp)
problem solution 首先因为前一个数时候一个数的因子,所以最长因子链肯定是递增的,先从小到大排个序. 然后因为n的大小只有1000,考虑dp,转移可以双循环 记f[i]表示到第i个数为止 ...
- 【代码源 Div1#103】子串的最大差 Codeforces - 817D,力扣2104,1900分
problem 视频讲解链接:https://www.bilibili.com/video/BV1Du411X7Nk solution 可以直接推导原答案ans = ∑i=1n∑j=in(max−mi ...
- 【CF 应用开发大赛】JEECG 基于代码生成器J2EE智能开发框架
为什么80%的码农都做不了架构师?>>> 应用名称:JEECG(J2EE Code Generation) 基于代码生成器J2EE智能开发框架 应用URL地址:http://j ...
- 【CF应用开发大赛】制造过程能力Cpk计算器
为什么80%的码农都做不了架构师?>>> 应用名称:制造过程能力Cpk计算器 应用URL地址:http://rongchaopj.cloudfoundry.com/OM/cpk ...
- 【CF应用开发大赛】微博社交简历
为什么80%的码农都做不了架构师?>>> 1 应用的名称:微博社交简历 2 应用URL 地址以及截图 由于cloudfoundry.com的速度问题,以及盛大云安装一个ge ...
- 【Cf Edu #47 F】Dominant Indices(长链剖分)
要求每个点子树中节点最多的层数,一个通常的思路是树上启发式合并,对于每一个点,保留它的重儿子的贡献,暴力扫轻儿子将他们的贡献合并到重儿子里来. 参考重链剖分,由于一个点向上最多只有$log$条轻边,故 ...
最新文章
- 选项选择Windows XP系统安装MySQL5.5.28图解
- 谷歌开发者大会杀出技术黑马,知乎AI终于不再隐藏实力了
- Java Properties 类读取配置文件信息
- R语言对数正态分布分布函数Log Normal Distribution(dlnorm, plnorm, qlnorm rlnorm)实战
- Hadoop vs Spark性能对比
- [Windows沙拉]调整Windows7下时间同步的频率
- 高等数学-傅里叶级数与傅里叶变换
- python 发送邮件附件很慢_Python SMTP 发送带附件电子邮件
- Java集合系列---LinkedHashMap源码解析
- 【AC】九度OJ题目1153:括号匹配问题
- feed43使用教程
- Windows核心编程_远线程方式实现Dll注入
- testbench实例 vhdl_[转载]VHDL的testbench的编写
- 跟我学折纸计算机教案,折纸活动教案
- 46000\46001\46002\MNC\MCC\IMSI
- 带你认识磁性材料及下游产品全球主流认证标识
- Promise.all中对于reject的处理
- allegro库函数 c语言,[转载]Allegro之Dev-Cpp版上手指南
- 去除字符串首尾空格(全角半角)
- 9.半兰伯特光照模型