阶梯NIM疑问
查看原帖
阶梯NIM疑问
938212
OMG_NOIP楼主2024/8/2 15:05

第一种写法(70pts):bi=ai+1−aib_i=a_{i+1}-a_i

第二种写法(100pts):bi=ai−ai−1b_i=a_{i}-a_{i-1}

个人认为第二种写法有时候回比第一种写法多异或一个0。但是应该对答案没有影响,为什么第一种写法中只有70pts?

第一种写法:

#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;
}

第二种写法:

#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;
}
2024/8/2 15:05
加载中...