给你一个由三个字符组成的字符串,就是两个字符之间有一个x
,两边的字符介于1
和9
之间。
淼题速切,不解释。
#include
using namespace std;
int main(){
char a,b;
scanf("%cx%c",&a,&b);
cout<<((a-'0')*(b-'0'));
}
Takahashi有一个字符串S,该字符串由小写英文字母组成,在这个字符串上,他可以做以下操作,只能做一次。
a
右移一位后变为b
;b
右移一位后变为c
;c
右移一位后变为d
;y
右移一位后变为z
;z
右移一位后变为a
。给你字符串S和T,判断Takahashi是否能够将S变为T。
用两个字符串的第一个字符求出它们的差值,记得加上26再mod26,这样能保证该差值为非负数。然后再用差值将t数组推出,再比较推出的数组和t数组是否相等。
#include
using namespace std;
char s[100005], t[100005];
long long c[100005];
int main() {
scanf("%s", s);
scanf("%s", t);
long long len = strlen(s);
long long tt = (t[0] + 26 - s[0]) % 26;
for (long long i = 1; i < len; i++) {
long long ttt = (t[i] + 26 - s[i]) % 26;
if (ttt != tt) {
cout << "No";
return 0;
}
}
cout << "Yes";
}
首先看数据范围, n ≤ 8 n\leq8 n≤8?!还是全排列?!那就直接处理出n个数的全排列,再暴力尝试即可AC。
#include
using namespace std;
long long n,m;
long long a[101][2];
long long b[101][101];
long long c[50005][101],cnt;
long long s[101];
bool vis[101];
void dfs(long long x){
if(x>n){
cnt++;
for(long long i=1;i<=n;i++){
c[cnt][i]=s[i];
}
return ;
}
for(long long i=1;i<=n;i++){
if(!vis[i]){
vis[i]=true;
s[x]=i;
dfs(x+1);
vis[i]=false;
}
}
}
int main(){
scanf("%lld%lld",&n,&m);
for(long long i=1;i<=m;i++){
scanf("%lld%lld",&a[i][0],&a[i][1]);
}
for(long long i=1;i<=m;i++){
long long x,y;
scanf("%lld%lld",&x,&y);
b[x][y]=1;
b[y][x]=1;
}
dfs(1);
for(long long i=1;i<=cnt;i++){
bool flag=true;
for(long long j=1;j<=m;j++){
long long x=a[j][0],y=a[j][1];
if(b[c[i][x]][c[i][y]]||b[c[i][y]][c[i][x]]){
}else{
flag=false;
break;
}
}
if(flag){
cout<<"Yes";
return 0;
}
}
cout<<"No";
}
结合样例可得,从 ( 1 , 1 ) (1,1) (1,1)到其他点的最大距离即为可访问的最多格子数。直接使用BFS暴力求出从 ( 1 , 1 ) (1,1) (1,1)到其他点的距离,然后找出最大值。
#include
using namespace std;
long long h,w;
long long mp[1001][1001];
bool vis[1001][1001];
long long f[1001][1001];
queue<pair<long long,long long> >q;
queue<long long>q1;
void bfs(){
vis[1][1]=true;
q.push(make_pair(1,1));
q1.push(1);
f[1][1]=1;
while(!q.empty()){
long long tx=q.front().first;
long long ty=q.front().second;
long long jl=q1.front();
q.pop();
q1.pop();
if(!vis[tx][ty+1]&&mp[tx][ty+1]){
vis[tx][ty+1]=true;
f[tx][ty+1]=jl+1;
q1.push(jl+1);
q.push(make_pair(tx,ty+1));
}
if(!vis[tx+1][ty]&&mp[tx+1][ty]){
vis[tx+1][ty]=true;
f[tx+1][ty]=jl+1;
q1.push(jl+1);
q.push(make_pair(tx+1,ty));
}
}
}
int main(){
scanf("%lld%lld",&h,&w);
for(long long i=1;i<=h;i++){
for(long long j=1;j<=w;j++){
char ch;
while(1){
scanf("%c",&ch);
if(ch=='.'||ch=='#'){
break;
}
}
if(ch=='.')mp[i][j]=1;
}
}
bfs();
long long ans=0;
for(long long i=1;i<=h;i++){
for(long long j=1;j<=w;j++){
ans=max(ans,f[i][j]);
}
}
cout<<ans;
}