【A. Bear and Game:】
【题意】给这么多时间点,这些时间点是interesting的点,如果连续15分钟不出现interesting的点的话,就要换了;问最长能看多上时间
【分析】直接模拟一下即可。
【AC代码】
#include <bits/stdc++.h>
using namespace std;
int a[100];
int main(){
int n;
while(~scanf("%d",&n)){
for(int i=1; i<=n; i++){
scanf("%d",&a[i]);
}
if(a[1]>15){
puts("15");
return 0;
}
for(int i=2; i<=n; i++){
if(a[i]-a[i-1]>15){
printf("%d\n",a[i-1]+15);
return 0;
}
}
if(a[n]<75)
{
cout<<a[n]+15<<endl;
}
else{
cout<<"90"<<endl;
}
}
return 0;
}
【B. Problems for Round】
【题意】把1到n这些数放到两个容器里,要求第一个容器里的任何数都小于第二个容器里的任何数,还有就是相似的不能放一块,相似没有传递性
【分析】两个容器第一个记录最大值,第二个记录最小值,对每一对相似的数,小的放在第一个,大的放在第二个,同时检测是否满足最大值最小值,还要更新最大最小,答案就是两者的差!
【AC代码】
#include <bits/stdc++.h>
using namespace std;
int a[100010];
const int INF = 0x3f3f3f3f;
int main(){
int n,m,u,v,maxx=-1,minn=INF,ans;
cin>>n>>m;
for(int i=1; i<=m; i++){
cin>>u>>v;
if(u>v)swap(u,v);
maxx = max(maxx,u);
minn = min(minn,v);
}
if(m==0)ans=n-1;
else{
if(minn<maxx) ans=0;
else ans = minn-maxx;
}
cout<<ans<<endl;
return 0;
}
【C. Bear and Colors】
【题意】给出这么多颜色,在一个序列中,dominant是出现次数最多的数,如果出现次数最多的不止一个,那么就是数值最小的那个
【分析】可以直接暴力统计了
【AC代码】
#include <bits/stdc++.h>
using namespace std;
int n,a[5010];
int ans[5010];
int temp;
int main(){
cin>>n;
for(int i=1; i<=n; i++) cin>>a[i];
for(int i=1; i<=n; i++){
int cnt[5010]={0};
int maxx=-1;
for(int j=i; j<=n; j++){
cnt[a[j]]++;
if(cnt[a[j]]>maxx){
maxx = cnt[a[j]];
temp = a[j];
}else if(cnt[a[j]]==maxx&&a[j]<temp){
temp = a[j];
}
ans[temp]++;
}
}
for(int i=1; i<=n; i++)cout<<ans[i]<<" ";
return 0;
}
【D. Bear and Two Paths】
【题意】给出n个节点,然后给出两条路线的起点和终点,要求你构造一个无向图,使无向图中a,b之间和c,d之间均无直接相连的边,且要求这个图的边的条数不超过k
【分析】发现n==4时怎么都不可能满足,可以构造这样的无向图,第一条路线ac...db;第二条路线ca...bd,这样的边是n+1条,是最少的了
【AC代码】
#include <bits/stdc++.h>
using namespace std;
int n,k,a,b,c,d;
int ans[1010],vis[1010];
int main(){
cin>>n>>k;
cin>>a>>b>>c>>d;
memset(vis,0,sizeof(vis));
memset(ans,0,sizeof(ans));
vis[a]=vis[b]=vis[c]=vis[d]=1;
if(k<n+1||n==4){
puts("-1");
return 0;
}
ans[1]=a,ans[2]=c,ans[n-1]=d,ans[n]=b;
int pos=3;
for(int i=1; i<=n; i++){
if(!vis[i]) ans[pos++]=i;
}
for(int i=1; i<=n; i++)cout<<ans[i]<<" ";cout<<endl;
cout<<ans[2]<<" "<<ans[1]<<" ";
for(int i=3; i<=n-2; i++)cout<<ans[i]<<" ";
cout<<ans[n]<<" "<<ans[n-1]<<endl;
return 0;
}
【ps:后面的题暂时做不来QAQ】