題意:給出乙個圖,求從任一位置射入光束後光束存在的最長時間與射入方向。若存在多種時間相同的,輸出字典序最小的方案。
題解:比較water的大模擬,題意看對很快能想出來
code
題意:有乙個\(n*m\)的黑白方格圖,每次詢問其中子矩形內部的黑色連通塊個數,保證任意兩個聯通的黑格間僅有一條路徑。#includeusing namespace std;
#define re register
#define ll long long
#define db double
#define il inline
#define for(x,a,b) for(re int x=a;x<=b;x++)
#define for2(x,a,b) for(re int x=a;x>=b;x--)
#define lfor(x,a,b) for(re ll x=a;x<=b;x++)
#define lfor2(x,a,b) for(re ll x=a;x>=b;x--)
#define abs(x) ((x>0)? x:-x)
#define inf 100000000
#define pii pair#define fi first
#define se second
#define mabs(x) ((abs(x))==(0)? (inf):(abs(x)))
int gi()
ll gl()
char mp[4]=;
int n,m,a[505][505];
bool mrk[505][505][4][4];
int time,ans[10];
int solve(pii pos,pii d)
void init()
int main()
pii ray;
cin>>ray.fi>>ray.se;
init();
ans[0]=solve(ray,pii(-1,0));
init();
ans[1]=solve(ray,pii(1,0));
init();
ans[2]=solve(ray,pii(0,-1));
init();
ans[3]=solve(ray,pii(0,1));
int ind=-1;
for(i,0,3) if(ind-1 || ans[ind]=inf) cout<
題意:有兩個數x,y,進行n次操作,對於第i次,有如下兩種操作型別可任選一:
1. x+=a[i],y-=b[i]求最終可以得到的\(x*y\)的最大值2. x-=c[i],y+=d[i]
題解:送分題。。。直接列舉\(2^n\)種方案,記錄個最大值就行。然後記得開long long。
code
#includeusing namespace std;
#define re register
#define ll long long
#define db double
#define il inline
#define for(x,a,b) for(re int x=a;x<=b;x++)
#define for2(x,a,b) for(re int x=a;x>=b;x--)
#define lfor(x,a,b) for(re ll x=a;x<=b;x++)
#define lfor2(x,a,b) for(re ll x=a;x>=b;x--)
#define abs(x) ((x>0)? x:-x)
#define inf 1000000000009
#define mabs(x) ((abs(x))==(0)? (inf):(abs(x)))
int gi()
ll gl()
int n,a[20],b[20],c[20],d[20];
ll ans,x,y;
void dfs(int pos)
ll t1=x,t2=y;
x+=a[pos],y=max((ll)0,y-b[pos]);
dfs(pos+1);
x=t1,y=t2;
y+=c[pos],x=max((ll)0,x-d[pos]);
dfs(pos+1);
x=t1,y=t2;
}int main()
題解:由上面加粗的部分,我們可以知道此圖能構造出一張dag,那麼聯通塊=點數-邊數。
二位字首和維護一下點數和邊數即可。注意每次詢問考慮的是矩形內部的連通塊。
code
題意:(偷懶)#includeusing namespace std;
#define re register
#define ll long long
#define db double
#define il inline
#define for(x,a,b) for(re int x=a;x<=b;x++)
#define for2(x,a,b) for(re int x=a;x>=b;x--)
#define lfor(x,a,b) for(re ll x=a;x<=b;x++)
#define lfor2(x,a,b) for(re ll x=a;x>=b;x--)
#define abs(x) ((x>0)? x:-x)
#define inf 1000000000009
#define mabs(x) ((abs(x))==(0)? (inf):(abs(x)))
int gi()
ll gl()
int n,m,q;
int pre_p[2005][2005],pre_e[2005][2005];
int pa[2005][2005],pb[2005][2005];
char s[2005][2005];
int main()
// printf("%d\n",pre_e[3][3]);
re int np,ne,x,y,xx,yy;
for(i,1,q)
return 0;}/*
5 5 6
11010
01110
10101
11101
01010
1 1 5 5
1 2 4 5
2 3 3 4
3 3 3 3
3 1 3 5
1 1 3 4
3 4 4
1101
0110
1101
1 1 3 4
1 1 3 1
2 2 3 4
1 2 2 4
*/
題解:進行仔細的長時間的分析研究(霧),發現我們要求的是逆序對數,但瞄一眼空間限制,32mb,在mle的面前我選擇妥協。
繼續思考,發現a很小,於是從a入手,發現\(x_i\)構成乙個等差數列,於是只要算小於a的逆序對數,剩餘的可直接遞推計算出來。
code
#includeusing namespace std;
#define re register
#define ll long long
#define db double
#define il inline
#define for(x,a,b) for(re int x=a;x<=b;x++)
#define for2(x,a,b) for(re int x=a;x>=b;x--)
#define lfor(x,a,b) for(re ll x=a;x<=b;x++)
#define lfor2(x,a,b) for(re ll x=a;x>=b;x--)
#define abs(x) ((x>0)? x:-x)
#define inf 1000000000009
#define mabs(x) ((abs(x))==(0)? (inf):(abs(x)))
int gi()
ll gl()
int n,x,a,mod;
int tr[500005];
int flag,pls,cut;
ll ans;
int lowbit(int x)
void change(int x)
int ask(int x)
int main()
{ freopen("fly.in","r",stdin);
freopen("fly.out","w",stdout);
n=gi(),x=gi(),a=gi(),mod=gi();
if(x
OI刷題記錄
2014 4 18 poj3264 bzoj1699 balanced lineup rmq 2014 4 19 bzoj1012 jsoi2008 最大數maxnumber noi2004 鬱悶的出納員 bzoj3224 tyvj 1728 普通平衡樹 2014 4 20 bzoj1862 105...
面試刷題記錄
寫一段 判斷乙個包括 的表示式是否合法 注意看樣例的合法規則。給定乙個表示式a,請返回乙個bool值,代表它是否合法。測試樣例 a b 5 4 返回 true 測試樣例 a b 5 4 返回 false include vector include iostream using namespace ...
刷題記錄 2015 11 14
現在每天做的題都記錄一下,免得不知道自己在幹什麼。poj2406 用next陣列的定義求迴圈節 poj3261 字尾陣列 題 spoj705 同上,這題我wa了幾次,結果發現 我以為字串只有大寫字母,其實有小寫。如下 poj2406 author duyixian date 2015 11 14 1...