A:不是‘.’的记录
void solve() {
string ss;
string ans = "";
cin >> ss;
for(int i=0;i<ss.size();i++){
if(ss[i]!='.'){
ans += ss[i];
}
}
cout << ans << endl;
}
A.模拟每次找最大
void solve() {
int m;
cin >> m;
VI ans;
while(m){
if(pow(3,10)<=m){
m-= pow(3,10);
ans.push_back(10);
continue;
}
if(pow(3,9)<=m){
m-= pow(3,9);
ans.push_back(9);
continue;
}
else if(pow(3,8)<=m){
m-= pow(3,8);
ans.push_back(8);
continue;
}else if(pow(3,7)<=m){
m-= pow(3,7);
ans.push_back(7);
continue;
}else if(pow(3,6)<=m){
m-= pow(3,6);
ans.push_back(6);
continue;
}else if(pow(3,5)<=m){
m-= pow(3,5);
ans.push_back(5);
continue;
}else if(pow(3,4)<=m){
m-= pow(3,4);
ans.push_back(4);
continue;
}else if(pow(3,3)<=m){
m-= pow(3,3);
ans.push_back(3);
continue;
}else if(pow(3,2)<=m){
m-= pow(3,2);
ans.push_back(2);
continue;
}else if(pow(3,1)<=m){
m-= pow(3,1);
ans.push_back(1);
continue;
}
else//if(pow(3,0)<=m){
{ m-= pow(3,0);
ans.push_back(0);
continue;
}
}
cout << ans.size() <<endl;
for(auto i : ans){
cout << i <<" ";
}
return;
}
C.每次从头遍历看定会超时,我们发现对于每次更新的x 令j = x-1,则只有
[j-2][j-1][j][j+1][j+2]会变化 看少了几个多了几个即可
void solve() {
int n,q;
cin >> n >> q;
string s;
cin >> s;
int ans = 0;
for(int i=0;i<s.size();i++){
if(s.substr(i,3)=="ABC"){
ans++;
}
}
while(q--){
int x;
char c;
cin >> x >> c;
int j = x-1;
//[j-2][j-1][j][j+1][j+2]
if(s[j]== c){
cout << ans <<endl;
continue;
}
//不同,可能减少,可能增多
//原有的
int t1 = 0,t2=0;
for(int k = j-2;k<=j;k++){
if(k<0){
continue;
}
if(s.substr(k,3)=="ABC"){
t1++;
}
}
s[j] = c;
//新的
for(int k = j-2;k<=j;k++){
if(k<0){
continue;
}
if(s.substr(k,3)=="ABC"){
t2++;
}
}
t2-=t1;
ans += t2;
cout << ans << endl;
}
}
D.题意要求找到有多少对i,j使得i,j之间没有q[x] > q[j]
观察可得最后两个一定是 1 0,那么维护一段序列,如果递增那么i j 合法 ,对于非递增处x,踢出q[x],更新即可
void solve() {
int n;
cin >> n;
for(int i=1;i<=n;i++){
cin >> a[i];
}
if(n==2){
cout <<"1 0"<<endl;
return ;
}
if(n==1){
cout <<"0"<<endl;
return ;
}
ans[n] = 0;ans[n-1] = 1;
deque<int> q;
q.push_back(a[n]);
if(a[n-1]>q.front())q.pop_back(),q.push_front(a[n-1]);
else q.push_front(a[n-1]);
for(int i = n-2;i>=1;i--){
ans [i] = q.size();
while(a[i]>q.front()&&!q.empty()){
q.pop_front();
}
q.push_front(a[i]);
}
for(int i=1;i<=n;i++){
cout <<ans[i]<<" ";
}
cout <<endl;
}