比赛链接:ABC341
先签个到。
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin>>n;
for(int i=0;i<n;i++)
cout<<"10"<<endl;
cout<<"1"<<endl;
return 0;
}
继续签。
#include <bits/stdc++.h>
using namespace std;
const int maxn=200005;
int a[maxn],s[maxn],t[maxn];
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
for(int i=1;i<=n-1;i++)
cin>>s[i]>>t[i];
for(int i=1;i<=n-1;i++)
a[i+1]+=a[i]/s[i]*t[i];
cout<<a[n]<<endl;
return 0;
}
水题,直接模拟就行了。
#include <bits/stdc++.h>
using namespace std;
int n,m,k;
char grid[505][505];
bool valid(int x,int y){
if(x>=1 && y>=1 && x<=n && y<=m && grid[x][y]!='#')
return true;
else
return false;
}
int main(){
cin>>n>>m>>k;
string op;
cin>>op;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++)
cin>>grid[i][j];
}
int ans=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(grid[i][j]=='#')
continue;
int x=i,y=j;
bool ok=true;
for(int l=0;l<k;l++){
if(op[l]=='L')
y--;
else if(op[l]=='R')
y++;
else if(op[l]=='U')
x--;
else
x++;
if(valid(x,y)){//看清条件
ok=false;
break;
}
}
if(ok)
ans++;
}
}
cout<<ans<<endl;
return 0;
}
有意思的数学题。
我们知道,从1到lcm(n,m)中,只有个可以被n整除,同理,有个可以被m整除。
而从1到lcm(n,m)中,只有lcm(n,m)可以同时被n和m整除。
再换句话说,从1到lcm(n,m)中有个只能被n整除,同理,有可以被m整除,所以,从1到lcm(n,m)中,有个符合条件的数。所以,在每个长度为lcm(n,m)的区间内,都有那么多个满足条件的数(实在懒得打LaTeX了)。
综上,答案就是在第个区间第k mod a小的数。
#include <bits/stdc++.h>
using namespace std;
long long lcm(long long x,long long y){
return x*y/__gcd(x,y);
}
long long count(long long x,long long y){
return lcm(x,y)/x+lcm(x,y)/y-2;
}
int main(){
long long n,m,k;
cin>>n>>m>>k;
long long ans=k/count(n,m)*lcm(n,m);
k%=count(n,m);
if(k==0){
cout<<ans-min(n,m)<<endl;
return 0;
}
long long p=1,q=1;
while(--k){//为什么这里写成k--不行啊
if(n*p<m*q)
p++;
else
q++;
}
cout<<ans+min(n*p,m*q)<<endl;
return 0;
}
顺便说一句,为什么19行不能写成k--啊,本蒟蒻调了半天,有知道的大佬可以在评论区告诉我,我将感激不尽。
我们定义一个数组f,用来看和是否相等。这样,只要,就输出YES。(注意,是加到) 单点修改,区间查询,树状数组取之!(没必要用线段树)
#include <bits/stdc++.h>
using namespace std;
const int maxn=500005;
int c[maxn];
bool f[maxn];
char S[maxn];
int lowbit(int x){
return x&(-x);
}
void modify(int x,int val){
while(x<maxn){
c[x]+=val;
x+=lowbit(x);
}
}
int query(int x){
int res=0;
while(x){
res+=c[x];
x-=lowbit(x);
}
return res;
}
int main() {
int N,Q;
cin>>N>>Q;
for(int i=1;i<=N;i++)
cin>>S[i];
for(int i=2;i<=N;i++){
if(S[i-1]==S[i]){
modify(i-1,1);
f[i-1]=true;
}
}
while(Q--){
int op,L,R;
cin>>op>>L>>R;
if(op==1){
if(f[L-1]){
modify(L-1,-1);
f[L-1]=false;
}
else if(L!=1){
modify(L-1,1);
f[L-1]=true;
}
if(f[R]){
modify(R,-1);
f[R]=false;
}
else{
modify(R,1);
f[R]=true;
}
}
else{
int res=query(R)-query(L-1);//注意加到a[R-1]
if(res==0)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
}
return 0;
}
ok,以上就是本期的全部内容了。我们下期再见!
友情提示:本期的代码都有问题(除了D的代码),请不要无脑Ctrl C+Ctrl V