codeforces-742

来源:互联网 发布:内存卡数据恢复 编辑:程序博客网 时间:2024/06/05 07:06

题目链接:点击打开链接

A. Arpa’s hard exam and Mehrdad’s naive cheat
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output

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.

Input

The single line of input contains one integer n (0  ≤  n  ≤  109).

Output

Print single integer — the last digit of 1378n.

Examples
input
1
output
8
input
2
output
4
Note

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");elseputs("6");}return 0;}

题目链接:点击打开链接

B. Arpa’s obvious problem and Mehrdad’s terrible solution
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output

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.

Input

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.

Output

Print a single integer: the answer to the problem.

Examples
input
2 31 2
output
1
input
6 15 1 2 3 4 1
output
2
Note

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 = 3j = 4 (since ) and i = 1j = 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 longusing 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];elseans=ans+vis[k]-1; // 相同时,减去他本身 }printf("%I64d\n",ans>>1);}return 0;}



0 0