codeforces-742

本文介绍了两个有趣的算法问题及解决方案:快速计算1378^n的末位数字,以及寻找数组中满足特定异或条件的数对。通过观察规律和使用哈希表实现了高效的解答。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目链接:点击打开链接

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");
		else
			puts("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 3
1 2
output
1
input
6 1
5 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 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;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值