社区讨论

阶梯NIM疑问

P3480[POI 2009] KAM-Pebbles参与者 5已保存回复 5

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
5 条
当前快照
1 份
快照标识符
@lzcd50n2
此快照首次捕获于
2024/08/02 15:08
2 年前
此快照最后确认于
2024/08/02 16:05
2 年前
查看原帖
第一种写法(70pts):bi=ai+1aib_i=a_{i+1}-a_i
第二种写法(100pts):bi=aiai1b_i=a_{i}-a_{i-1}
个人认为第二种写法有时候回比第一种写法多异或一个0。但是应该对答案没有影响,为什么第一种写法中只有70pts?
第一种写法:
CPP
#include<bits/stdc++.h>
#define ll long long
#define endl '\n'
using namespace std;

ll n,a[1005],b[1005];

void work(){
	cin>>n;
	for(ll i=1;i<=n;i++)cin>>a[i];
	for(ll i=1;i<n;i++)b[i]=a[i+1]-a[i];
	ll asd=0;
	for(ll i=n-1;i>=1;i-=2)asd^=b[i];
	if(asd==0)cout<<"NIE"<<endl;
	else cout<<"TAK"<<endl;
}

signed main(){
	ios::sync_with_stdio(false);
	
	ll T;cin>>T;
	while(T--)work(); 
	
	return 0;
}
第二种写法:
CPP
#include<bits/stdc++.h>
#define ll long long
#define endl '\n'
using namespace std;

ll n,a[1005],b[1005];

void work(){
	cin>>n;
	for(ll i=1;i<=n;i++)cin>>a[i];
	for(ll i=1;i<=n;i++)b[i]=a[i]-a[i-1];
	ll asd=0;
	for(ll i=n;i>=1;i-=2)asd^=b[i];
	if(asd==0)cout<<"NIE"<<endl;
	else cout<<"TAK"<<endl;
}

signed main(){
	ios::sync_with_stdio(false);
	
	ll T;cin>>T;
	while(T--)work(); 
	
	return 0;
}

回复

5 条回复,欢迎继续交流。

正在加载回复...