2020牛客多校训练第3场ABC
题目来源:2020牛客暑期多校训练营(第三场)A-Clam and Fish
题目链接:https://ac.nowcoder.com/acm/contest/5668/A
题目大意:有n个阶段,每个阶段可能是4种状态的一种。
1:没鱼没饲料;
2:没鱼有饲料;
3:有鱼没饲料;
4:有鱼有饲料。
对于每个阶段:
我们可以用饲料做鱼饵,
或者用鱼饵钓鱼,
或者在该状态有鱼的时候直接把鱼抓起来。
解题思路:在3.4状态是,我们必然是直接把有的鱼抓起来就可以了。
在第1种状态,如果我们手里有鱼饵就可以钓一条鱼。
在第3种状态,如果后面的1的数量比当前存的鱼饵量多或等于,就继续存鱼饵,反之钓鱼。
*/
#include<bits/stdc++.h>
using namespace std;
int main()
{
int t;
scanf("%d",&t);
for(int ii=1;ii<=t;ii++){
int n;
scanf("%d",&n);
string s;
cin>>s;
int s1[n+9],s0[n+9];
s1[n]=s0[n]=0;
for(int i=n-1;i>=0;i--){
if(s[i]=='0')s0[i]=s0[i+1]+1;
else s0[i]=s0[i+1];
}
int food=0,fish=0;
for(int i=0;i<n;i++){
if(s[i]=='0'){
if(food>=1)food--,fish++;
}
else if(s[i]=='1'){
if(s0[i]>=food)food++;
else {
if(food>=1)food--,fish++;
else food++;
}
}
else fish++;
}
printf("%d\n",fish);
}
return 0;
}
/*
题目来源:2020牛客暑期多校训练营(第三场)B-Classical String Problem
题目链接:https://ac.nowcoder.com/acm/contest/5668/B
题目大意:给你一个字符串,n次操作。
m表示把前面k个字符挪后面,或把后面-k(k为负数)个挪前面。
a表示询问,第k个字母是什么。
解题思路:首位相连,看成一个环以后,所谓的挪动其实就是改动把那个字母看成头,然后这题就没了。
*/
#include<bits/stdc++.h>
using namespace std;
int main()
{
string s;
cin>>s;
s=" "+s;
int l=s.size()-1;s[0]=s[l];
int n;
cin>>n;
int sum=0;
for(int i=1;i<=n;i++){
getchar();
char c;
int x;
scanf("%c%d",&c,&x);
if(x<0)x+=l;
if(c=='A')printf("%c\n",s[(sum+x)%l]);
else sum=(sum%l+x)%l;
}
return 0;
}
/*
题目来源:2020牛客暑期多校训练营(第三场)C-Operation Love
题目链接:https://ac.nowcoder.com/acm/contest/5668/C
题目大意:给出左手和右手的二维坐标表示法。可能会旋转平移,逆时针或顺时针给出,不会改变大小,问是左手还是右手。
解题思路:先确定是逆时针还是顺时针。然后找出长度为10的那条边,看它接下来的边的长度就可以确定是左手还是右手了。
在判断是否相等的过程中需要注意精度问题,有时候结果可能是个小数,需要四舍五入到int型进行判断
*/
#include<bits/stdc++.h>
using namespace std;
struct point
{
double x,y;
point (){}
point (double x,double y):x(x),y(y){}
point operator + (point b){return point (x+b.x,y+b.y);}
point operator - (point b){return point (x-b.x,y-b.y);}
};typedef point Vector;
double Cross(Vector a,Vector b){return a.x*b.y-a.y*b.x;}
point p[24];
double parea(int n)
{
double area=0;
for(int i=0;i<n;i++)
{
area+=Cross(p[i],p[(i+1)%n]);
}
return area/2;
}
int dis(point a,point b){
return (int)(sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y))+0.5);
}
int main()
{
int n;
cin>>n;
while(n--){
double s;
for(int i=0;i<20;i++){
cin>>p[i].x>>p[i].y;
}
p[21]=p[1];
if(parea(20)<0){
int i;
for( i=0;i<20;i++){
if(dis(p[i],p[(i+1)%20])==9)break;
}
if(dis(p[(i+1)%20],p[(i+2)%20])==6)cout<<"right"<<endl;
else cout<<"left"<<endl;
}
else{
int i;
for( i=0;i<20;i++){
if(dis(p[i],p[(i+1)%20])==9) break;
}
if(dis(p[(i+1)%20],p[(i+2)%20])==6)cout<<"left"<<endl;
else cout<<"right"<<endl;
}
}
return 0;
}

浙公网安备 33010602011771号