题目链接:点击打开链接
There exists an island called Arpa’s land, some beautiful girls live there, as ugly ones do.
Mehrdad wants to become minister of Arpa’s land. Arpa has prepared an exam. Exam has only one question, given n, print the last digit of 1378n.

Mehrdad has become quite confused and wants you to help him. Please help, although it's a naive cheat.
The single line of input contains one integer n (0 ≤ n ≤ 109).
Print single integer — the last digit of 1378n.
1
8
2
4
In the first example, last digit of 13781 = 1378 is 8.
In the second example, last digit of 13782 = 1378·1378 = 1898884 is 4.
思路:只看最后一位就行了,发现 8 的 n 次方的最后一位数周期为 4,还有 n 为 0时,特判
#include<cstdio>
using namespace std;
int n;
int main()
{
while(~scanf("%d",&n))
{
if(n==0)
puts("1");
else if(n%4==1)
puts("8");
else if(n%4==2)
puts("4");
else if(n%4==3)
puts("2");
else
puts("6");
}
return 0;
}
题目链接: 点击打开链接
There are some beautiful girls in Arpa’s land as mentioned before.
Once Arpa came up with an obvious problem:
Given an array and a number x, count the number of pairs of indices i, j (1 ≤ i < j ≤ n) such that , where
is bitwise xoroperation (see notes for explanation).

Immediately, Mehrdad discovered a terrible solution that nobody trusted. Now Arpa needs your help to implement the solution to that problem.
First line contains two integers n and x (1 ≤ n ≤ 105, 0 ≤ x ≤ 105) — the number of elements in the array and the integer x.
Second line contains n integers a1, a2, ..., an (1 ≤ ai ≤ 105) — the elements of the array.
Print a single integer: the answer to the problem.
2 3 1 2
1
6 1 5 1 2 3 4 1
2
In the first sample there is only one pair of i = 1 and j = 2. so the answer is 1.
In the second sample the only two pairs are i = 3, j = 4 (since ) and i = 1, j = 5 (since
).
A bitwise xor takes two bit integers of equal length and performs the logical xor operation on each pair of corresponding bits. The result in each position is 1 if only the first bit is 1 or only the second bit is 1, but will be 0 if both are 0 or both are 1. You can read more about bitwise xor operation here: https://en.wikipedia.org/wiki/Bitwise_operation#XOR.
题意:给你一组数,让你找出这里面有几组数满足 a[ i ] ^ a[ j ] == x。
思路:异或运算特殊,逆运算也成立;当时犯了一个zz的错误,以为每个数只能被利用一次,就一直 wa,后来没搞头就直接去睡觉了
#include<cstdio>
#include<cstring>
#include<map>
#define LL long long
using namespace std;
int n,x;
LL a[100010];
map<LL,LL> vis;
int main()
{
while(~scanf("%d%d",&n,&x))
{
vis.clear();
for(int i=0;i<n;i++)
{
scanf("%I64d",a+i);
vis[a[i]]++;
}
LL ans=0;
for(int i=0;i<n;i++)
{
int k=a[i]^x;
if(k!=a[i])
ans=ans+vis[k];
else
ans=ans+vis[k]-1; // 相同时,减去他本身
}
printf("%I64d\n",ans>>1);
}
return 0;
}