Ozon Tech Challenge 2020 (Div.1 + Div.2) C. Kuroni and Impossible Calcula(快速乘+特判)

http://codeforces.com/contest/1305/problem/C

需要有个特判,n>m的时候直接输出0,

透,就差这一步,一直T,后来发现加了个特判直接过了,后悔死了

其他的我就用了个快速乘

#include <iostream>
#include<bitset>
#include <algorithm>
#include <cmath>
#include <ctype.h>
#include <cstring>
#include <cstdio>
#include <set>
#include <iostream>
#include <cstdio>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <cstring>
#include <map>
#include <stack>
#include <set>
#include<iomanip>
#define SIS std::ios::sync_with_stdio(false)
#define ll long long
#define INF 0x3f3f3f3f
const int mod = 1e9 + 7;
const double esp = 1e-5;
const double PI = 3.141592653589793238462643383279;
using namespace std;
const int N = 1e7 + 5;
const int maxn = 1 << 20;
ll powmod(ll a, ll b) { ll res = 1; a %= mod; while (b >= 0); for (; b; b >>= 1) { if (b & 1)res = res * a % mod; a = a * a % mod; }return res; }
ll gcd(ll a, ll b) { return b ? gcd(b, a % b) : a; }
/*void chafen(int l, int r, int k) {//差分函数
	p[l] += k;
	p[r + 1] -= k;
}*/
ll fastMul(ll a, ll b, ll p) {//快速乘
	a %= p;
	ll ans2 = 0;
	while (b > 0) {
		if (b & 1)
			ans2 = (ans2 + a) % p;
		b >>= 1;
		a = (a + a) % p;
	}
	return ans2;
}
ll modMul(ll a, ll b, ll p)//极限快速乘
{
	if (p <= 1000000000)
		return a * b % p;
	else if (p <= 000000000000ll)
		return (((a * (b >> 20) % p) << 20) + (a * (b & ((1 << 20) - 1)))) % p;
	else {
		ll d = (ll)floor(a * (long double)b / p + 0.5);
		ll ret = (a * b - d * p) % p;
		if (ret < 0) ret += p;
		return ret;
	}
}
/*************************************************************/
int a[N], b[N],c[N];
int main() {
		int n;
		ll m;
		cin >> n >> m;
		for (int i = 1; i <= n; i++)
			cin >> a[i];
		ll ans = 1; ll ans1 = 0;
		if (n == 2) {
			cout << abs(a[1] - a[2]) % m << endl;
		}
		else if (n > m)
			cout << 0 << endl;
		else 
		{
		    for(int i=1;i<=n;i++)
			   for (int j = i+1; j <= n; j++) {
				   ans1 = abs(a[i] - a[j])%m;
				   //cout << ans1 << " ";
				   ans = fastMul(ans, ans1, m);//极限快速乘也可以,而且更快
			}
		cout << ans << endl;
		}

	return 0;
}
/*

*/

还有一个代码感觉也得记一下

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

deebcjrb

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值