Classical String Problem:
链接:B-Classical String Problem_2023牛客五一集训派对day3 (nowcoder.com)
区间反转,用指针优化的操作:
#include<bits/stdc++.h>
using namespace std;
char s[5020501];
int main()
{
//ios::sync_with_stdio(false);
// cin.tie(0);
// cout.tie(0);
//char s[10020];
scanf("%s",s);
//cout<<s<<endl;
int n;
scanf("%d",&n);
getchar();
char c;
int cnt;
int now=0;
int x;
int len=strlen(s);
for(int i=1;i<=n;i++)
{
scanf("%c %d",&c,&x);
//cout<<c<<x<<endl;
getchar();
if(c=='A')
{
x--;
printf("%c\n",s[(now+x)%len]);
}
else if(c=='M')
{
x=(x+len)%len;
now=(now+x)%len;
}
}
}
Clam and Fish:读懂题目很重要》》
A-Clam and Fish_2023牛客五一集训派对day3 (nowcoder.com)
#include<bits/stdc++.h>
using namespace std;
#define int long long
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int _;
cin>>_;
while(_--)
{
int n;
cin>>n;
string s;
cin>>s;
int cnt=0;
int ans=0;
for(int i=0;i<s.size();i++)
{
if(s[i]=='0')
{
if(cnt>0)
{
cnt--;
ans++;
}
}
else if(s[i]=='1'){
cnt++;
}
else if(s[i]=='2'){
ans++;
}
else if(s[i]=='3'){
ans++;
}
}
cout<<ans+cnt/2<<endl;
}
}
Operation Love:默认情况下的小数误差可以取0.05;一道计算几何的题目。
C-Operation Love_2023牛客五一集训派对day3 (nowcoder.com)
#include<bits/stdc++.h>
using namespace std;
typedef pair<double,double> PDD;
PDD v[20];
int main(){
int t;
scanf("%d",&t);
double x,y;
while(t--){
for(int i=0;i<20;i++){
scanf("%lf%lf",&x,&y);
v[i]={x,y};
}
PDD A,B,C,T;
for(int i=0;i<20;i++){
for(int j=i+1;j<20;j++){
if((v[i].first-v[j].first)*(v[i].first-v[j].first)+(v[i].second-v[j].second)*(v[i].second-v[j].second)>=8.95*8.95&&
(v[i].first-v[j].first)*(v[i].first-v[j].first)+(v[i].second-v[j].second)*(v[i].second-v[j].second)<=9.05*9.05){
A={v[i].first,v[i].second};
C={v[j].first,v[j].second};
break;
}
}
}
bool flag=0;// flag=0时,以C为直角交点;flag=1时,以A为直角交点;
// 以A为直角交点
for(int i=0;i<20;i++){
if((v[i].first-A.first)*(v[i].first-A.first)+(v[i].second-A.second)*(v[i].second-A.second)>=7.95*7.95&&
(v[i].first-A.first)*(v[i].first-A.first)+(v[i].second-A.second)*(v[i].second-A.second)<8.05*8.05){
B={v[i].first,v[i].second};
flag=1;
break;
}
}
// 以C为直角交点
for(int i=0;i<20;i++){
if((v[i].first-C.first)*(v[i].first-C.first)+(v[i].second-C.second)*(v[i].second-C.second)>=7.95*7.95&&
(v[i].first-C.first)*(v[i].first-C.first)+(v[i].second-C.second)*(v[i].second-C.second)<8.05*8.05){
B={v[i].first,v[i].second};
flag=0;
break;
}
}
if(flag){
if((C.first-A.first)*(B.second-A.second)-(C.second-A.second)*(B.first-A.first)<0)
puts("right");
else
puts("left");
}else{
if((A.first-C.first)*(B.second-C.second)-(A.second-C.second)*(B.first-C.first)<0)
puts("right");
else
puts("left");
}
}
return 0;
}