A. Points in Segments
1.description:寻找没被覆盖的点的个数 。
2.AC code:
#include<iostream>
#include<map>
#include<set>
using namespace std;
map<int,int>mp;
set<int>s;
int main(){
ios::sync_with_stdio(false);cin.tie(0);
int n,m;cin>>n>>m;
for(int i=1;i<=n;i++){
int a,b;cin>>a>>b;
for(int i=a;i<=b;i++)mp[i]++;
}
for(int i=1;i<=m;i++)if(!mp[i])s.insert(i);
cout<<s.size()<<endl;
set<int>::iterator it=s.begin();
while(it!=s.end()){cout<<*it<<" ";it++;}
}
B. Obtaining the String
description:在只允许第x和x+1两个位置的字符相互转换的条件下计算使得t字符串转换为s字符串需要的步数。
AC code:
swap()函数。
#include<iostream>
using namespace std;
const int N=105;
int n,top,q[N*N],j;string s,t;
int main(){
ios::sync_with_stdio(false);cin.tie(0);
cin>>n>>s>>t;
for(int i=0;i<n&&top>=0;i++){
for(j=i;j<n;j++)if(t[i]==s[j])break;
if(j==n)top=-1;
else for(int k=j-1;k>=i;--k)q[++top]=k,swap(s[k],s[k+1]);
}
cout<<top<<endl;
for(int i=1;i<=top;i++)cout<<q[i]+1<<" ";
}
C. Songs Compression
AC code:
#include<iostream>
#include<algorithm>
using namespace std;
const int N=1e5+6;
typedef long long ll;
int c[N],ans;ll sum;
bool cmp(int a,int b){return a>b;}
int main(){
ios::sync_with_stdio(false);cin.tie(0);
int n,m;cin>>n>>m;
for(int i=1;i<=n;i++){
int a,b;cin>>a>>b;
if(a-b>0)c[i]=a-b;else c[i]=b-a;
sum+=a;
}
sort(c+1,c+n+1,cmp);
for(int i=1;i<=n;i++)
if(sum>m)ans++,sum-=c[i];else break;
if(sum>m)cout<<-1<<endl;
else cout<<ans<<endl;
}
D. Walking Between Houses
AC code:
#include<iostream>
using namespace std;
typedef long long ll;
ll n,k,s;
int main(){
ios::sync_with_stdio(false);cin.tie(0);
cin>>n>>k>>s;
if(s<k||s>(n-1)*k)cout<<"NO"<<endl;
else {
cout<<"YES"<<endl;
int cnt=1;
while(k--){
int r=min(s-k,n-1);
s-=r;
if(cnt+r<=n)cnt+=r;
else cnt-=r;
cout<<cnt<<" ";
}
}
}