比赛链接:ABC341
Problem A:
先签个到。
#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;
}
Problem B:
继续签。
#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;
}
Problem C:
水题,直接模拟就行了。
#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;elsereturn 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--;elsex++;if(valid(x,y)){//看清条件ok=false;break;}}if(ok)ans++;}}cout<<ans<<endl;return 0;
}
Problem D:
有意思的数学题。
我们知道,从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 g(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/g(n,m)*lcm(n,m);k%=g(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++;elseq++;}cout<<ans+min(n*p,m*q)<<endl;return 0;
}
顺便说一句,为什么19行不能写成k--啊,本蒟蒻调了半天,有知道的大佬可以在评论区告诉我,我将感激不尽。
E是线段树,就先咕了。
ok,以上就是本期的全部内容了。我们下期再见!
友情提示:本期的代码都有问题(除了D的代码),请不要无脑Ctrl C+Ctrl V