1.P1288 取数游戏 II
原题指路: P1288 取数游戏 II - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)https://www.luogu.com.cn/problem/P1288
一方无路可走意味着另一方胜利,而一次移动最多只能创造出一条0边,这就意味着造成终局的步骤,一定是赢家主动走到了一条0边旁。
#include <bits/stdc++.h>
using namespace std;
int a[25];
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
int lf = 0;
int rf = 0;
for(int i=1;i<=n;i++){
if(a[i]!=0)
lf++;
else
break;
}
for(int i=n;i>=1;i--){
if(a[i]!=0)
rf++;
else
break;
}
if(lf%2==1 || rf%2==1)
cout<<"YES";
else
cout<<"NO";
return 0;
}
2.P2197 【模板】Nim 游戏
!!!每组石子按位运算的异或和==0时为必败点,即先手必输。
#include <bits/stdc++.h>
using namespace std;
int t,n;
int main()
{
cin>>t;
while(t--){
cin>>n;
int ans=0;
for(int i=1;i<=n;i++){
int x;
cin>>x;
ans ^= x;
}
if(!ans) cout<<"No"<<endl;
else cout<<"Yes"<<endl;
}
return 0;
}
3.P1113 杂务
原题指路:P1113 杂务 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)https://www.luogu.com.cn/problem/P1113
#include <bits/stdc++.h>
using namespace std;
int n,l,t,ans[10005],max_ans;
int main()
{
cin>>n;
for(int i=1;i<=n;++i){
cin>>i;
cin>>l;
int temp=0;
while(cin>>t && t){
temp = max(ans[t],temp);
}
ans[i] = temp+l;
max_ans = max(ans[i],max_ans);
}
cout<<max_ans;
return 0;
}
4.P1002 [NOIP2002 普及组] 过河卒
原题指路:P1002 [NOIP2002 普及组] 过河卒 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)https://www.luogu.com.cn/problem/P1002
#include<bits/stdc++.h>
using namespace std;
const int dir[8][2]={{1,2},{1,-2},{2,1},{2,-1},{-1,2},{-1,-2},{-2,1},{-2,-1}};
bool d[30][30];
long long dp[30][30],n,m,cx,cy;
int main(){
cin>>n>>m>>cx>>cy;
d[cx][cy]=true;
for(int i=0;i<8;i++){
int tx=cx+dir[i][0],ty=cy+dir[i][1];
if(tx>=0&&tx<=n&&ty>=0&&ty<=m) d[tx][ty]=true;
}
dp[0][0]=1;
for(int i=0;i<=n;i++){
for(int j=0;j<=m;j++){
if(d[i][j]==false){
if(i) dp[i][j]+=dp[i-1][j];
if(j) dp[i][j]+=dp[i][j-1];
}
}
}
cout<<dp[n][m]<<endl;
return 0;
}