小米 Online Judge 19年2月常規賽題解
小米 Online Judge 19年2月常規賽題解
描述
小愛同學有一個智慧密碼鎖。鎖上有九位數字,小愛同學每次會給A,B,C,D,mod,n六個正整數。 題目是這樣的:
現在小愛同學想計算出 G(n)G(n) 的值(G(n)為F(n)的前n項積),並用該值作為密碼鎖的密碼。
由於結果過大,所以答案 G(n)%mod
輸入
多組資料。每組包含 6 個整數,分別代表 A, B, C, D, mod, n. (1<=A,B,C,D,mod,n<=1000000000);資料組數不超過 2000.
輸出
輸出 G(n)%mod 的值。
答案保留 9 位有效數字,不足則補 0.
輸入樣例
2 2 2 2 1000 3
7 9 3 4 6 5
輸出樣例
000000064
000000003
題解
標程
Carryon 數數字
Carryon 最近迷上了數數字,然後 Starry 給了他一個區間 [l, r][l,r] ,然後提了幾個要求,
- 需要將 ll 到 rr 之間的數全部轉化成 16 進位制,然後連起來。
- 將連起來的數又轉化成 10 進位制。
- 將最終結果對 15 取模。
資料範圍:1 <= l <= r <= 10000000000001<=l<=r<=1000000000000
輸入
單組輸入 ll 和 rr 的值
輸出
輸出最終結果。
輸入樣例
10 14
輸出樣例
0 提示:10、11、12、13、14的16進位制分別是a、b、c、d、e。依次連在一起是abcde,轉換成10進位制是703710,對15取模為0。
題解:
標程
Logic Gatekeeper
描述
boshi是Rayment的好朋友。
Rayment最近迷上了一個叫Just Shapes & Beats
的音遊,於是就推薦給了boshi(網易雲上也有這個遊戲部分音樂的歌單)。可boshi有點著迷於遊戲音樂難以集中精神,有時反應慢了半拍,導致他在第二關就掛了一回。忍無可忍的boshi摘下了耳機,他決定用個更科學的方法來通過這一關。
這首歌的名字就叫做Logic Gatekeeper
。如果想的話,你也可以一邊聽歌一邊切這道題目。
遊戲的不同關卡攻擊方式都不一樣,但這關的攻擊方式比較簡單。形式化地來說,攻擊可以被具象化為對一個矩陣的攻擊,也就是說如果你待在這個矩陣的範圍內,你就會受到1的攻擊。
遊戲介面可以認為是一個n×m
的矩陣,而遊戲角色恰好佔一個方格的位置。boshi會進行不斷地進行預測某個子矩陣的攻擊概率升高或降低了一定數值,同時為了評估某一個子矩陣的安全性,他也要知道如果他隨機待在子矩陣內的一個位置,受到攻擊的期望是多少。當然,初始時整個遊戲介面任意一個位置的攻擊概率為0。
為了避免小數產生的誤差,boshi給出的所有的概率都是在模998244353998244353意義下的值,因此你在輸出期望的時候也應該對998244353998244353取模。
Rayment聽得腦袋都暈了,boshi只好請你來幫他過了這關,不受一點攻擊才能拿到S評定。
輸入
第一行三個整數n
,m
,q
,含義同題目描述。
接下來q
行有兩種格式,如下:
1 a b c d k
,含義是以(a,b)為左下角,(c,d)為右上角的子矩陣的攻擊概率均加上k2 a b c d
,含義是詢問以(a,b)為左下角,(c,d)為右上角的子矩陣的攻擊期望
資料有梯度,且對於100\%100%的資料保證滿足:
輸出
對於每一個2操作,輸出一行一個整數,表示相應的答案。
輸入樣例
4 4 3
1 1 1 3 3 4
1 2 3 4 4 5
2 2 2 3 3
輸出樣例
499122183
標程一
#include <algorithm>
#include <cstdio>
#define rg register
#define lowbit(x) ((x)&(-(x)))
using namespace std;
typedef long long ll;
const int maxn=1000010,maxm=100010,mod=998244353;
template <typename Tp> inline void getmin(Tp &x,Tp y){if(y<x) x=y;}
template <typename Tp> inline void getmax(Tp &x,Tp y){if(y>x) x=y;}
template <typename Tp> inline void read(Tp &x)
{
x=0;int f=0;char ch=getchar();
while(ch!='-'&&(ch<'0'||ch>'9')) ch=getchar();
if(ch=='-') f=1,ch=getchar();
while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();
if(f) x=-x;
}
struct data{
int tp,t,x,y,id,y2;
bool operator < (const data &p){return x<p.x;}
}q[maxm<<2],tmp[maxm<<2];
int n,m,k,tot,qc,top,ans[maxm],res[maxm],id[maxm<<2];
inline int pls(int x,int y){return x+y>=mod?x+y-mod:x+y;}
inline int dec(int x,int y){return x-y<0?x-y+mod:x-y;}
struct BIT{
int a[maxn],a2[maxn];
void add(int p,int v)
{
for(int i=p;i<=m;i+=lowbit(i))
a[i]=pls(a[i],v),a2[i]=pls(a2[i],(ll)p*v%mod);
}
int query(int p)
{
int res=0;
for(int i=p;i;i-=lowbit(i)) res=pls(res,dec((ll)(p+1)*a[i]%mod,a2[i]));
return res;
}
}a,b;
int power(int x,int y)
{
int res=1;
for(;y;y>>=1,x=(ll)x*x%mod)
if(y&1)
res=(ll)res*x%mod;
return res;
}
void input()
{
int op,x,y,s,t,val;
read(n);read(m);read(k);m++;tot=k<<1;
for(rg int i=1;i<=k;i++)
{
read(op);read(x);read(y);read(s);read(t);
x++;y++;s++;t++;
if(op==1)
{
read(val);
q[(i<<1)-1]=(data){0,i,s,t,val,y};
q[i<<1]=(data){0,i,x-1,t,mod-val,y};
}
else
{
q[(i<<1)-1]=(data){1,i,s,t,++qc,y};
q[i<<1]=(data){2,i,x-1,t,qc,y};
res[qc]=power((ll)(s-x+1)*(t-y+1)%mod,mod-2);
}
}
sort(q+1,q+tot+1);
}
void cdq(const int &l,const int &r)
{
int mid=(l+r)>>1;
if(l<mid) cdq(l,mid);
if(mid+1<r) cdq(mid+1,r);
rg int i=l,j=mid+1;top=0;
while(i<=mid&&j<=r)
{
if(q[i].t<=q[j].t) tmp[++top]=q[i++],id[top]=0;
else tmp[++top]=q[j++],id[top]=1;
}
while(i<=mid) tmp[++top]=q[i++],id[top]=0;
while(j<=r) tmp[++top]=q[j++],id[top]=1;
for(i=1;i<=top;i++)
{
if(id[i])//r
{
if(tmp[i].tp==1)
ans[tmp[i].id]=pls(ans[tmp[i].id],dec(a.query(tmp[i].y),a.query(tmp[i].y2-
1)));
else if(tmp[i].tp==2)
ans[tmp[i].id]=dec(ans[tmp[i].id],dec(a.query(tmp[i].y),a.query(tmp[i].y2-
1)));
else b.add(tmp[i].y2,tmp[i].id),b.add(tmp[i].y+1,mod-tmp[i].id);
}
else{
if(tmp[i].tp==1)
ans[tmp[i].id]=pls(ans[tmp[i].id],
(ll)tmp[i].x*dec(b.query(tmp[i].y),b.query(tmp[i].y2-1))%mod);
else if(tmp[i].tp==2)
ans[tmp[i].id]=dec(ans[tmp[i].id],
(ll)tmp[i].x*dec(b.query(tmp[i].y),b.query(tmp[i].y2-1))%mod);
else a.add(tmp[i].y2,(ll)tmp[i].id*tmp[i].x%mod),a.add(tmp[i].y+1,(ll)(modtmp[
i].id)*tmp[i].x%mod);
}
}
for(i=1;i<=top;i++)
{
if(!tmp[i].tp){
if(id[i]) b.add(tmp[i].y2,mod-tmp[i].id),b.add(tmp[i].y+1,tmp[i].id);
else a.add(tmp[i].y2,mod-(ll)tmp[i].id*tmp[i].x%mod),a.add(tmp[i].y+1,
(ll)tmp[i].id*tmp[i].x%mod);
}
q[l+i-1]=tmp[i];
}
}
int main()
{
input();
cdq(1,tot);
for(rg int i=1;i<=qc;i++) printf("%lld\n",(ll)ans[i]*res[i]%mod);
return 0;
}
相關文章
- Online Judge——1000.A+B Problem(c++)C++
- 帶你快速搭建自己的Online Judge平臺
- Aizu Online Judge Introduction to Programming I C語言實現 ITP1 Topic # 1AIC語言
- [ABC221D] Online games 題解GAM
- MySQL Online DDL詳解MySql
- 關於LLM-as-a-judge正規化,終於有綜述講明白了
- 10.31 模擬賽題解
- 【leetcode 399 周賽】【題解】LeetCode
- bupt 2024 新生賽題解
- P6475 [NOI Online #2 入門組] 建設城市 題解
- 常見規格排列組合問題
- 業務規則的常見問題解答
- 魔靈召喚:2022公會聯賽第三季常規賽開啟 初賽8強誕生
- 2019山東ACM省賽補題題解ACM
- 藍橋杯省賽真題2013題解
- USACO 比賽指導建議和常見問題
- git常見問題解決Git
- As常見問題解決方法
- 牛客小白月賽105 題解
- 牛客周賽 Round 66 題解
- 2024湖南省賽題解(不全)
- 【題目全解】ACGO排位賽#13Go
- 【題目全解】ACGO排位賽#12Go
- 【題解】「CSP模擬賽」雨天 rainAI
- 【題目全解】ACGO排位賽#9Go
- [leetcode 第 400 場周賽]題解LeetCode
- 2018 徐州網路賽 G 題解
- 【Contest】Nowcoder 假日團隊賽1 題解+賽後總結
- keepalived 1.3.5常見配置以及常見問題解決
- 動態規劃解題方法動態規劃
- leetcode題解(動態規劃)LeetCode動態規劃
- Git常見問題及解決Git
- 大廠常考動態規劃演算法題動態規劃演算法
- 牛客周賽 Round 70 A~G 題解
- 【題目全解】ACGO巔峰賽#15Go
- [題解]NOIP2018模擬賽 plutotree
- 2024.10.17 模擬賽T3 題解
- 牛客周賽 Round 62 全部題解