BZOJ3391 小球遊戲

2021-08-06 06:26:18 字數 1575 閱讀 8640

題目描述

輸入格式

第一行乙個整數n(n≤200000)。

接下來n行,每行兩個整數ai和bi(ai,bi≤3000)。

輸出格式

由於實際答案可能很大,你只需要輸出e*c(n,2)的值對998244353取餘的結果,其中e表示期望值的準確值。

樣例輸入 4

0 01 1

0 11 0

樣例輸出 12

樣例解釋:

取一二盒子:, 2種;

取一三盒子: 1種;

取一四盒子: 1種;

取二三盒子:, , 3種;

取二四盒子:,, 3 種;

取三四盒子: , 2種;

共12種。

** by azui

題解,來自azui:

e*c(n,2)的值就是總情況數。

轉換思路,將小球模型轉化為網格路徑模型來看待。

一共有a個紅球,b個藍球,放在一排的方案數等於a行b列的方格沿著右、下兩個方向從左上角走到右下角的方案數。

如果是兩個盒子 i 和 j,那就是座標系上從(-ai,-bi)走到(aj,bj)的方案數(最少步數)。

將每個盒子拆成(ai,bi)和(-ai,-bi)兩個點。現在考慮從第三象限中任意一點走到第一象限中任意一點的方案數之和(記為 x)。x 的求法顯然,只需乙個6000*6000的網格dp即可做到。

其與答案的出入為:增加了 j≤i 的非法情況。

我們可以o(n)減去i和j相等的情況,就只剩下j

#includeconst int mod=998244353;

const int t=3000;

const int n=6000;

const int m=200000;

void getin( int &shu )

int fac[m+5], inv[m+5];

void pre()

for( int i=2; i<=m; i++ )

inv[i]=1ll*inv[i]*inv[i-1]%mod;

//階乘的逆元等於逆元的階乘: inv(4!)==inv(1)*inv(2)*inv(3)*inv(4)

}int c( int m, int r )

int n, sum, ans, a, b;

int dp[n+5][n+5], cnt[t+5][t+5];

int main()

for( int i=0; i<=n; i++ )

for( int j=0; j<=n; j++ )

ans=( ans-sum+mod)%mod;

ans=1ll*ans*inv[2]%mod;

printf( "%d\n", ans );

return 0;

}

運動的小球遊戲

coding utf 8 import sys 匯入系統模組 import pygame 匯入pygame模組 pygame.init 初始化pygame size width,height 640,480 設定視窗大小 screen pygame.display.set mode size 顯示視...

junjie 接小球遊戲

import pygame import random import time python game loading.初始化.載入中.pygame.init 介面遊戲 dis 分開 play玩 diaplay 展覽展示的意思 set設定 mode模式 chuang kou pygame.displ...

關於js實現小球遊戲

要實現的功能 1.建立綠色小球 2.綠色小球的隨機移動 3.檢測綠色小球和紅色球的碰撞 4.拖拽紅色球 檢測邊界碰撞 5.定時器的設定和停止 用到的方法 1.window.location.reload 2.setinterval 定時器 3.css3.0屬性 cursor的用法 url需使用的自定...