玩了一天,一回家还没坐下多久就开始了。太累了,但还是强迫自己写了点
第一题:
题目链接:https://m1.codeforces.com/contest/1549/problem/A
题目:给你一个素数,求从2到p之间的两个值使得𝑃mod𝑎=𝑃mod𝑏。
思路:因为是素数,所以这个数一定是奇数(不是说奇数都是素数的意思,但是素数除了2一定是奇数)。直接找p mod a=1的情况那么a=2,b=p-1;直接输出就行了。
#include <iostream>
#include<string>
using namespace std;
int main(int argc, const char * argv[]) {
//找两个数的被p除的余数相等(p是素数,5,7,11,13,17)
int t;
cin>>t;
while (t--) {
long long int p;
cin>>p;
cout<<2<<" "<<p-1<<endl;
}
}
第二题:
题目链接
B - Gregor and the Pawn Game |
题目:下棋游戏,问能到达第一行的棋子有多少个,棋子的行进规律:1)前方为空,直接前进进入第一行。2)当斜上方没有自己的棋子的时候可以向斜上方进入第一行,即使有地方棋子,也可以吃掉敌方棋子进入。(注意自己的棋子到达第一行不会移动了,占住了一个位置,不能再进入棋子)
思路:字符串的比较,先看己方的字符串,若当前位置为‘1’则与敌人字符串的当前位置比较,为‘0’直接进入第一行,如果为‘1’那么就向斜上方进入,并且在敌人字符串当前位置的值赋值成其他数记录已经有棋子的状态。
#include <iostream>
#include<string>
using namespace std;
int main(int argc, const char * argv[]) {
int t;
cin>>t;
while (t--) {
string s1,s2;
int size,ans=0;
cin>>size;
cin>>s1>>s2;
for (int i=0; i<size; i++) {
if (s2[i]=='1') {
if (s1[i]=='0') {
ans++;
}
else{
if (s1[i-1]=='1') {
ans++;
s1[i-1]=2;
}
else if(s1[i+1]=='1'){
ans++;
s1[i+1]=2;
}
}
}
}
cout<<ans<<endl;
}
}