A. Marin and Photoshoot
没什么好说的–>注意防下界负数的出现
#include<bits/stdc++.h>
using namespace std;
vector<int> res;
int t;
int main(){
cin>>t;
for(int i=0;i<t;i++){
int n;
string s;
cin>>n>>s;
for(int j=0;j<s.size();j++){
if(s[j]=='0')res.push_back(j);
}
int num=0;
for(int j=1;j<res.size();j++){
num+=max(0,3-(res[j]-res[j-1]));
}
cout<<num<<endl;
}
return 0;
}
C. Shinju and the Lost Permutation
题目类型:大模拟类型题目,
新的知识点收获:
rotate函数的使用
适用对象:vector
使用形式rotate(a.begin(),a.begin+p,a.end());
注:p为查找数(本题中为1)在vector中的下标
rotate可以将查找数(本题中为1)之前的数进行移动到原vector容器的后面
思路分析:
在本题中,本人的思考路线大致是正确的
比如:**1. ** 1是一个关键点,在数组中有且仅有一个1 ===>并且需要特判
**2. ** 每次增幅最多在合理的情况下如果若是c数组其中相邻的的两项从左到右是
递增的情况下,最多只能增加一项,在c数组其中相邻的的两项从左到右是
非递增的情况下为>=1的任何数值都是合理的
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int q[N];
int t;
void solve(){
int n;
cin>>n;
vector<int>a(n);
for(int &it:a)cin>>it;
if(count(a.begin(),a.end(),1)!=1){
cout<<"NO\n";
return;
}
int p=find(a.begin(),a.end(),1)-a.begin();
rotate(a.begin(),a.begin()+p,a.end());
for(int i=1;i<n;i++){
if(a[i]-a[i-1]>=2){
cout<<"NO\n";
return;
}
}
cout<<"YES\n";
return;
}
int main(){
cin>>t;
while(t--)solve();
return 0;
}