Educational Codeforces Round 91 (Rated for Div. 2)
A. Three Indices
题目描述
Example
input
3
4
2 1 4 3
6
4 6 1 2 5 3
5
5 3 1 2 4
output
YES
2 3 4
YES
3 5 6
NO
题意思路:t组输入,每组输入一个n,然后n个数,要求是否再数组内存在,一个数左边有比它小的,右边也有比它小的,若有输出YES并输出三个位置,可能有很多种,任意一个,若不存在,则输出NO。
代码
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 600010;
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n,a[1005];
scanf("%d",&n);
for(int i=1; i<=n; i++)
scanf("%d",&a[i]);
int flag=0,i,l,r;
for(i=1; i<=n; i++)
{
int pd1=0,pd2=0;
for(int j=1; j<i; j++)
{
if(a[j]<a[i])
{
pd1=1;
l=j;
break;
}
}
for(int j=i+1; j<=n; j++)
{
if(a[j]<a[i])
{
pd2=1;
r=j;
break;
}
}
if(pd1==1&&pd2==1)
{
flag=1;
break;
}
}
if(flag==1)
{
printf("YES\n");
printf("%d %d %d\n",l,i,r);
}
else
{
printf("NO\n");
}
}
return 0;
}
B. Universal Solution
题目描述
Example
input
3
RRRR
RSP
S
ouput
PPPP
RSP
R
题意思路:就是需要跟一个机器人剪刀石头布,然后机器人是随机挑选一个位置然后再依次序“出”n个变化。我们需要找出一个固定的“出”法,使得不管机器人怎么出,我们这个出法最后赢得数的平均数最大。一开始并没有想到。因为机器人出的每一个(剪刀,石头,布)的个数是固定的,所以我们只需要求出这三个中,出现的次数最多的那个,然后把我们的数组全部变成能够赢这个最多的。这样我们就可以保证我们无论机器人从哪个位置开始出,我们都能赢这最多的个数的次数,结果的平均值也是这个最多的个数。
代码
写代码的时候还有一个问题,就是输入问题,一开始用char定义字符串,scanf输入老是超时,然后改成了string定义,scanf输入,结果我把输入的结果输出查看时啥也没有,然后就又把scanf改成了cin输入,然后就顺畅了。
em。。。。。。。。。。
#include <bits/stdc++.h>
#include<string.h>
using namespace std;
typedef long long ll;
const int N = 600010;
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
string ss;
cin>>ss;
int p=0,s=0,r=0;
for(int i=0; i<ss.size(); i++)
{
if(ss[i]=='P')
p++;
else if(ss[i]=='S')
s++;
else if(ss[i]=='R')
r++;
}
int as=max(p,max(s,r));
//printf("%d %d %d %d\n",p,s,r,as);
if(p==as)
{
for(int i=0; i<ss.size(); i++)
printf("S");
}
else if(s==as)
{
for(int i=0; i<ss.size(); i++)
printf("R");
}
else if(r==as)
{
for(int i=0; i<ss.size(); i++)
printf("P");
}
printf("\n");
}
return 0;
}
C. Create The Teams
Example
input
3
5 10
7 11 2 9 5
4 8
2 4 2 3
4 11
1 3 3 7
output
2
1
0
题意思路:t组输入,每组输入一个n和x,然后输入n个数,然后将这n位同学分组,要求,每位同学只能是有组或者没组,即不存在一个人有多个组,然后问最多有多少组,满足每组的人数*组里最低的数值>=输入的x。可以直接将数组的数从大到小排序,然后需判断记录个数与现在的这个数值(因为已排序,所以现在这个最小)的乘积是否大于等于输入的x。
代码
#include <bits/stdc++.h>
#include<string.h>
using namespace std;
typedef long long ll;
const int N = 600010;
bool cmp(ll a,ll b)
{
return a>b;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
ll n,x,a[100005];
scanf("%lld%lld",&n,&x);
for(ll i=0; i<n; i++)
scanf("%lld",&a[i]);
sort(a,a+n,cmp);
ll ans=0,num=0;
for(ll i=0; i<n; i++)
{
if(a[i]*(num+1)>=x)
{
ans++;
num=0;
}
else
{
num++;
}
}
printf("%lld\n",ans);
}
return 0;
}