前言
蒟蒻又来发题解了,今天感觉没有水题 又是哭哭唧唧写题的一天啊QAQ
A. Gregor and Cryptography
题目的大致意思:找出两个数使得给定数被除之后余数相等(水题~)
题解:
#include<iostream>
using namespace std;
int main()
{
int t;
cin>>t;
while(t--){
int n;
cin>>n;
for(int i=2;i<n;i++){
if(n%i!=0){
cout<<i<<" "<<n/i*i<<endl;
break;
}
}
}
return 0;
}
B. Gregor and the Pawn Game
题目的大致意思:两人对战下棋,敌方棋子只在第一行,而且始终不动。我方棋子在第n行,当我方棋子正上方没有棋子时可以向上走一步,有棋子时只能吃掉对角线上的敌方棋子才可以移动。问我方有几颗棋子能够到达第一行(水题~)
解题思路:利用两个数组分别储存我方棋子和敌方棋子位置,因为敌方棋子只在第一行,所以相当于可以把我方棋子直接放在第二行,直接判断最后一步能否移动就可以。
题解:
#include<iostream>
using namespace std;
int main()
{
int t;
cin>>t;
while(t--){
int n;
cin>>n;
char a[n]={'0'},b[n]={'0'};
for(int i=0;i<n;i++)cin>>a[i];//储存敌方棋子
for(int i=0;i<n;i++)cin>>b[i];//储存我方棋子
int ans=0;
for(int i=0;i<n;i++){
if(b[i]=='1'){
if(a[i]=='0') ans++;
else if(i-1>=0&&a[i-1]=='1'||i+1<n&&a[i+1]=='1'){//判断能否移动,注意数组不要越界
if(i-1>=0&&a[i-1]=='1'){
ans++;
a[i-1]='0';
}
else{
ans++;
a[i+1]='0';
}
}
}
}
cout<<ans<<endl;
}
return 0;
}
总结
这一场的题不好,就只补到这里了…