mirror of
https://gitcode.com/Zengtudor/alg2025.git
synced 2025-12-18 21:21:43 +00:00
refactor: 重写 P11362.cpp 并优化算法实现
将原文件从 src/8/11 移动到 src/11/8 并完全重写实现 使用更简洁的算法逻辑处理输入数据并计算结果 移除冗余的幂运算函数,直接使用模运算简化计算过程
This commit is contained in:
parent
3abd9891ef
commit
e95cd401c4
59
src/11/8/P11362.cpp
Normal file
59
src/11/8/P11362.cpp
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
#include <algorithm>
|
||||||
|
#include <cstdint>
|
||||||
|
#include <iostream>
|
||||||
|
#include <istream>
|
||||||
|
#include <set>
|
||||||
|
#include <unordered_set>
|
||||||
|
using ll = int64_t;
|
||||||
|
#define sl static inline
|
||||||
|
|
||||||
|
const ll maxm=1e5+7,p=1e9+7;
|
||||||
|
ll n,m,v;
|
||||||
|
struct X{
|
||||||
|
ll c,d;
|
||||||
|
inline bool operator<(const X& o)const{
|
||||||
|
return c<o.c;
|
||||||
|
}
|
||||||
|
}x[maxm];
|
||||||
|
std::unordered_set<int> s;
|
||||||
|
|
||||||
|
sl void solve(){
|
||||||
|
std::cin>>n>>m>>v;
|
||||||
|
for(ll i=1;i<=m;i++){
|
||||||
|
std::cin>>x[i].c>>x[i].d;
|
||||||
|
s.insert(x[i].c);
|
||||||
|
}
|
||||||
|
std::sort(x+1,x+1+m);
|
||||||
|
for(ll i=1;i<m;i++){
|
||||||
|
if(x[i].c==x[i+1].c && x[i].d!=x[i+1].d){
|
||||||
|
std::cout<<"0\n";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ll ans=1;
|
||||||
|
for(ll i=1;i<n;i++){
|
||||||
|
if(s.count(i)&s.count(i+1)){
|
||||||
|
ans=(ans+1)%p;
|
||||||
|
}else{
|
||||||
|
ans=ans*v%p*v%p;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
std::cout<<ans<<"\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
xi yes xi+1 no v*v
|
||||||
|
xi no xi+1 yes v*v
|
||||||
|
xi yes xi+1 yes v*v-1
|
||||||
|
*/
|
||||||
|
|
||||||
|
int main(){
|
||||||
|
std::iostream::sync_with_stdio(false);
|
||||||
|
std::cin.tie(nullptr);
|
||||||
|
|
||||||
|
ll t;
|
||||||
|
std::cin>>t;
|
||||||
|
while(t--){
|
||||||
|
solve();
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,84 +0,0 @@
|
|||||||
#include <iostream>
|
|
||||||
#include <map>
|
|
||||||
|
|
||||||
using ll = long long;
|
|
||||||
using namespace std;
|
|
||||||
const int MOD = 1e9 + 7;
|
|
||||||
|
|
||||||
ll p(ll b, ll e) {
|
|
||||||
ll res = 1;
|
|
||||||
b %= MOD;
|
|
||||||
while (e > 0) {
|
|
||||||
if (e % 2 == 1) res = (res * b) % MOD;
|
|
||||||
b = (b * b) % MOD;
|
|
||||||
e /= 2;
|
|
||||||
}
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
void solve() {
|
|
||||||
ll n;
|
|
||||||
int m;
|
|
||||||
ll v;
|
|
||||||
cin >> n >> m >> v;
|
|
||||||
map<int, int> mc;
|
|
||||||
for (int i = 0; i < m; ++i) {
|
|
||||||
int c, d;
|
|
||||||
cin >> c >> d;
|
|
||||||
if (mc.count(c) && mc[c] != d) {
|
|
||||||
for (int j = i + 1; j < m; ++j) cin >> c >> d;
|
|
||||||
cout << 0 << endl;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
mc[c] = d;
|
|
||||||
}
|
|
||||||
if (m == 0) {
|
|
||||||
if (n == 1) {
|
|
||||||
cout << 1 << endl;
|
|
||||||
} else {
|
|
||||||
cout << p(v, (n - 1) * 2) << endl;
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
ll tot = 1;
|
|
||||||
ll vmod = v % MOD;
|
|
||||||
int lp = 0;
|
|
||||||
for (auto const& [idx, val] : mc) {
|
|
||||||
ll len = idx - lp;
|
|
||||||
if (len > 0) {
|
|
||||||
ll s;
|
|
||||||
if (lp == 0) {
|
|
||||||
s = p(vmod, (len - 1) * 2);
|
|
||||||
} else {
|
|
||||||
ll v2len = p(vmod, len * 2);
|
|
||||||
ll vlen = p(vmod, len);
|
|
||||||
ll vlenm1 = p(vmod, len - 1);
|
|
||||||
s = (v2len - vlen + vlenm1 + MOD) % MOD;
|
|
||||||
}
|
|
||||||
tot = (tot * s) % MOD;
|
|
||||||
}
|
|
||||||
lp = idx;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (lp < n) {
|
|
||||||
ll len = n - lp;
|
|
||||||
|
|
||||||
|
|
||||||
ll s = p(vmod, len * 2);
|
|
||||||
tot = (tot * s) % MOD;
|
|
||||||
}
|
|
||||||
|
|
||||||
cout << tot << endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
int main() {
|
|
||||||
ios_base::sync_with_stdio(false);
|
|
||||||
cin.tie(NULL);
|
|
||||||
cout.tie(nullptr);
|
|
||||||
int t;
|
|
||||||
cin >> t;
|
|
||||||
while (t--) {
|
|
||||||
solve();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Loading…
Reference in New Issue
Block a user