模拟,如果有两格都是障碍就过不去结束
#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
typedef pair<int,int>pii;
#define N 1010000
int a[N],b[N];
int dp[N];
void solve(){
int n;
cin>>n;
string s;
cin>>s;
int res=0;
for(int i=0;i<n;i++){
if(s[i]=='@') res++;
if(s[i]=='*'&&s[i+1]=='*') {
break;
}
}
cout<<res<<endl;
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t=1;
cin>>t;
// init();
while(t--){
solve();
}
}
模拟,用累计的年除以当前年+1乘以这个年份,保证比这次大即可
#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
typedef pair<int,int>pii;
#define N 1010000
int a[N],b[N];
int dp[N];
void solve(){
int n;
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}
int res=0;
for(int i=0;i<n;i++){
res=(res/a[i]+1)*a[i];
}
cout<<res<<endl;
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t=1;
cin>>t;
// init();
while(t--){
solve();
}
}
正向处理的话会有有的数取逆元会导致有丢失,所以我们用逆向思考。
离线处理,存结果,然后再输出
#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
typedef pair<int,int>pii;
#define N 1010000
int a[N],b[N];
int dp[N];
void solve(){
int n,m;
cin>>n>>m;
for(int i=0;i<n;i++) cin>>a[i];
string s;
cin>>s;
int l=0,r=n-1;
for(int i=0;i<n;i++){
if(s[i]=='L') b[i]=l++;
else b[i]=r--;
}
vector<int>ans;
int sum=1;
for(int i=n-1;i>=0;i--){
sum=sum*a[b[i]]%m;
ans.push_back(sum%m);
}
reverse(ans.begin(),ans.end());
for(auto x:ans) cout<<x<<" ";
cout<<endl;
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t=1;
cin>>t;
// init();
while(t--){
solve();
}
}
高精度加法+前缀和
12345=12345+1234+123+12+1
可以看出只需要从后往前求前缀然后进位就行
#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
typedef pair<int,int>pii;
#define N 1000000
int a[N],b[N];
int n;
void solve(){
cin>>n;
string s;
cin>>s;
for(int i=0;i<=n;i++) a[i]=0;
reverse(s.begin(),s.end());
while(s.back()=='0') s.pop_back(),n--;
for(int i=0;i<n;i++) a[i]=s[i]-'0';
for(int i=n-2;i>=0;i--){
a[i]+=a[i+1];
}
for(int i=0;i<n;i++){
if(a[i]>=10){
if(i==n-1) n++;
a[i+1]+=a[i]/10;
a[i]=a[i]%10;
}
}
for(int i=n-1;i>=0;i--) cout<<a[i];
cout<<endl;
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t;
cin>>t;
while(t--){
solve();
}
}