Codeforces Round #481 (Div. 3)【完结】
2022.3.1
题目地址:https://codeforces.com/contest/978
目录
- A. Remove Duplicates【模拟】
- B. File Name【贪心 / 双指针】
- C. Letters【前缀和+二分】
- D. Almost Arithmetic Progression【暴力枚举】
- E. Bus Video System【思维 贪心】
- F. Mentors【二分】
- G. Petya's Exams【贪心】
A. Remove Duplicates【模拟】
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int a[N],st[N],n;
set<int>s;
vector<int>ve;
int main(void)
{cin>>n;for(int i=0;i<n;i++) cin>>a[i],s.insert(a[i]);cout<<s.size()<<endl;for(int i=n-1;i>=0;i--){if(st[a[i]]) continue;ve.push_back(a[i]);st[a[i]]++;}for(int i=ve.size()-1;i>=0;i--) cout<<ve[i]<<" ";return 0;
}
B. File Name【贪心 / 双指针】
计算出一段一段的xxx…,对于每一段计算最少的删除个数,累加即可。
#include<bits/stdc++.h>
using namespace std;
int n;
string s;
int main(void)
{cin>>n>>s;if(s.find("xxx")==-1) puts("0");else{int cnt=0;for(int i=0;i<s.size();i++){if(s[i]=='x'){int j=i;while(j+1<s.size()&&s[j+1]=='x') j++;int len=j-i+1;if(len>=3) cnt+=len-2;i=j;}}cout<<cnt;}return 0;
}
C. Letters【前缀和+二分】
#include<bits/stdc++.h>
using namespace std;
typedef long long int LL;
const int N=1e5*2+10;
LL a[N],b[N],s[N],n,m;
int main(void)
{cin>>n>>m;for(int i=1;i<=n;i++) cin>>a[i],s[i]=s[i-1]+a[i];for(int i=1;i<=m;i++) {cin>>b[i];int index=lower_bound(s+1,s+n+1,b[i])-s;cout<<index<<" "<<b[i]-s[index-1]<<endl;}return 0;
}
D. Almost Arithmetic Progression【暴力枚举】
不难但是细节挺多的,枚举前两项,即可确定公差。
然后判断即可,注意原数据和等差数列的数据的差值最多为1。
#include<bits/stdc++.h>
using namespace std;
const int N=1e5*2+10;
typedef long long int LL;
int dx[3]={0,-1,1};
int a[N],n,ans=1e9;
void solve(int x,int sum,int d)
{int b[N]={0};b[1]=x;for(int i=2;i<n;i++) b[i]=b[i-1]+d;//根据首相公差构造数组for(int i=2;i<n;i++) {int len=abs(b[i]-a[i]);if(len>1) return;//公差大于1sum+=len;} if(sum<=n) ans=min(ans,sum);//步数小于等于n
}
int main(void)
{cin>>n;for(int i=0;i<n;i++) cin>>a[i];if(n==1){ puts("0");return 0;}for(int i=0;i<3;i++){for(int j=0;j<3;j++) {int tempx=a[0]+dx[i];int tempy=a[1]+dx[j];int d=tempy-tempx;//公差solve(tempy,abs(dx[i])+abs(dx[j]),d);//a[1] 步数 公差}}if(ans<=n) cout<<ans;else cout<<-1;return 0;
}
E. Bus Video System【思维 贪心】
同过多次读题你会发现,求其前缀和就是各个站所对应的人数。
我们存一下,minv和maxv则显然问题就转化成了使这个图形向上平移。最多可以平移多少步可以使minv>=0且maxv<=m。
分为4种情况:
- minv>=0,maxv>=0
- minv>=0,maxv<=0(直接pass)
- minv<=0,maxv>=0
- minv<=0,maxv<=0
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int a[N],n,m;
int main(void)
{cin>>n>>m;int minv=1e9,maxv=-1e9,sum=0;for(int i=0;i<n;i++) cin>>a[i];for(int i=0;i<n;i++){sum+=a[i];maxv=max(maxv,sum);minv=min(minv,sum);}if(minv<-m||maxv>m) {puts("0");return 0;}if(minv>=0&&maxv>=0) cout<<m-maxv+1;else if(minv<=0&&maxv>=0){maxv+=abs(minv);if(maxv>m) puts("0");else cout<<min(m-abs(minv)+1,m-maxv+1);}else if(minv<=0&&maxv<=0){maxv+=abs(minv);if(maxv>m) puts("0");else cout<<min(m-abs(minv)+1,m-maxv+1);}return 0;
}
F. Mentors【二分】
#include<bits/stdc++.h>
using namespace std;
const int N=1e5*2+10;
int a[N],b[N],cnt[N],n,m;
int main(void)
{cin>>n>>m;for(int i=1;i<=n;i++) cin>>a[i],b[i]=a[i];sort(b+1,b+n+1);while(m--){int s1,s2; cin>>s1>>s2;if(a[s1]>a[s2]) cnt[s1]--;//将冲突的数量减去if(a[s1]<a[s2]) cnt[s2]--;//将冲突的数量减去}for(int i=1;i<=n;i++){int l=lower_bound(b+1,b+n+1,a[i])-b;//找到大于等于a[i]的下标if(b[l]>=a[i]) l--;//减去cnt[i]+=l;cout<<cnt[i]<<" ";}return 0;
}
G. Petya’s Exams【贪心】
按先结束的排序,在按先开始的排序。
然后枚举天数,贪心的模拟即可。
需要注意的一点就是题目隐含的信息是,对于每门的考试考试日必须考试这也是符合常理的。
#include<bits/stdc++.h>
using namespace std;
const int N=110;
int a[N],n,m,cnt,ans[N];
struct node{int st,ed,c,k,id;}Node[N];
bool cmp(node a,node b)
{if(a.ed==b.ed) return a.st<b.st;return a.ed<b.ed;
}
int main(void)
{cin>>n>>m;for(int i=0;i<m;i++) {cin>>Node[i].st>>Node[i].ed>>Node[i].c,Node[i].id=i+1;}sort(Node,Node+m,cmp);for(int i=1;i<=n;i++){for(int j=0;j<m;j++){if((Node[j].c==Node[j].k)&&(i==Node[j].ed)) //准备的天数够了,且是考试日{ans[i]=m+1,cnt++;break;}if(Node[j].k==Node[j].c) continue;//准备的天数够了但不是考试日。if(Node[j].st<=i&&i<Node[j].ed)//在区间内{ans[i]=Node[j].id;Node[j].k++;break;}}}if(cnt==m)//考完了m门{for(int i=1;i<=n;i++) cout<<ans[i]<<" ";}else puts("-1");return 0;
}
Codeforces Round #481 (Div. 3)【完结】相关推荐
- Codeforces Round #481 (Div. 3) A. Remove Duplicates
题目地址:http://codeforces.com/contest/978/problem/A 题解:给一串长度为n的数组,然后删去相同的数字(从右往左). 方法:题目n和数组ai给的范围都很小,所 ...
- Codeforces Round #481 (Div. 3) F. Mentors 思维
BUG反馈门 F. Mentors time limit per test 3 seconds memory limit per test 256 megabytes input standard i ...
- Codeforces Round #481 (Div. 3) F. Mentors(排序,暴力,map记忆化)
题目 题意: 如果一个程序员比另一个程序员的能力值高,而且这两个程序员不在争吵状态,则能力值较高的程序员可以成为另一个程序员的老师,求每个程序员能成为多少其他程序员的老师. 思路: 先啥都不管,结构体 ...
- Codeforces Round #481 (Div. 3) F. Mentors(思维+二分)
有 n 个程序员,每个程序员都有他的技能分数,分数严格高的可以做分数低的程序员的老师,但是有 k 对人发生过矛盾,他们不能构成师生关系,问每个人最多可以做几个人的老师 开始想的是开一个数组从 i∈[1 ...
- Codeforces Round #481 (Div. 3)题解
成功掉到灰,真的心太累了,orz!!!!,不是很懂那些国外大佬为什么每次都是20多分钟AK的,QAQ A. Remove Duplicates time limit per test 1 second ...
- Codeforces Round #481 (Div. 3) E. Bus Video System
E. Bus Video System Example 1 input 3 5 2 1 -3 output 3Example 2 input 2 4 -1 1 output 4Example 3 in ...
- C. Tyler and Strings(组合数学,树状数组维护前缀和)(Codeforces Round #775 (Div. 1, based on Moscow Open Olympiad i)
对我来说比较困难的一题了,尝试着自己写了一下,调不出来遂放弃. Codeforces Round #775 (Div. 1, based on Moscow Open Olympiad in Info ...
- Codeforces Round #506 (Div. 3)
Codeforces Round #506 (Div. 3) 实习期间事不多,对div3 面向题解和数据编程了一波 A. Many Equal Substrings 题目链接 A题就是找后缀和前缀重合 ...
- Codeforces Round #563 (Div. 2)/CF1174
Codeforces Round #563 (Div. 2)/CF1174 CF1174A Ehab Fails to Be Thanos 其实就是要\(\sum\limits_{i=1}^n a_i ...
最新文章
- 重庆大学计算机学院就读,唐远炎(计算机学院)老师 - 重庆大学 - 院校大全
- ie compatibility
- 用友BIP|YonBuilder+APICloud 双平台,“1+1>N”的低代码战略
- 浏览器访问网页的详细内部过程
- 35岁学python爬虫_35岁码农的机器学习入门之路-python篇
- 装饰器python3 默认_python3【基础】-装饰器
- python识别_识别串口/ usb设备python
- Xcode10:library not found for -lstdc++.6.0.9 临时解决
- java生成视频缩略图
- laravel之生成PDF文档-TCPDF
- python把正整数翻译成英文_使用Python将Pig Latin翻译成英文3
- java中成员变量的加载时机_工作奇谈——JAVA高级特性之反射
- 0x80070091目录不是空的,处理方法
- 锂电池供电电路设计方案汇总(四款设计方案)
- 获取当前时间、获取当前月的第一天、获取当前年的第一天
- 自控力读书笔记 第八章	 传染:为什么意志力会传染?
- AndroidInputSystem
- 各类后门整理!【白帽黑客必备生存技能】
- 设计中的确定性与不确定性思考
- python爬取汽车之家_python爬虫实战之爬取汽车之家网站上的图片