目录
CodeForces - 978A A - Remove Duplicates
CodeForces - 978B B - File Name
CodeForces - 978A A - Remove Duplicates
题意:给一个序列,删除重复的数字。相同的数字只保留一个最右边的。
思路:设置一个vis数组,和一个x数组,从右往左判断重复,第一次出现加入x,倒序输出。
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
bool vis[1000+10];
int a[50+10];
int x[50+10];
int main(){
int n;
cin>>n;
int ans = 0;
memset(vis,0,sizeof(vis));
for (int i=0;i<n;i++) cin>>a[i];
for (int i=n-1;i>=0;i--) {
if(!vis[a[i]]) {
vis[a[i]]=1;
x[ans]=a[i];
ans+=1;
}
}
cout<<ans<<endl;
for (int i=ans-1;i>=0;i--){
cout<<x[i]<<" ";
}
return 0;
}
CodeForces - 978B B - File Name
题意:xxxx超过3个的删掉,也就是最多两个连续。
思路:遍历一遍,记录x连续的次数,>=3得加入到ans
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
int n;
string s;
cin>>n>>s;
int ans=0;
int x=0;
for(int i=0;i<n;i++){
if(s[i]=='x') x++;
else{
if(x>=3) ans+=x-2;
x=0;
}
}
if(x>=3) ans+=x-2;
cout<<ans<<endl;
}
CodeForces - 978C C - Letters
题意:有n宿舍,每个宿舍ai个房间,现在给你一个数q,问q是第几个宿舍第几个房间,。1<=q<=sum(ai)。
思路:通过ai得前缀和,二分查找q在那里。
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll MAXN = 2*1e5+10;
ll room[MAXN];
int main(){
int n,m;
ll a,q;
cin>>n>>m>>room[0];
for(int i=1;i<n;i++) {
cin>>a;
room[i]=room[i-1]+a;
}
while (m--) {
cin>>q;
//二分寻找
int l=0,r=n-1;
while(l<=r) {
int mid=(l+r)/2;
if(room[mid]<q) l=mid+1;
else r=mid-1;
}
cout<<l+1<<" ";
if(l==0) cout<<q<<endl;
else cout<<q-room[l-1]<<endl;
}
}