t1t2分往臉上送,t3直接勸退。
數三角形。
先固定一條直線,求它能與其他直線組成多少個三角形。這個很好求。
令 \(s\) 為所有直線的集合,\(k_i\) 表示直線 \(i\) 的斜率,\(c_k\) 表示斜率為 \(k\) 的直線條數,則直線 \(l\) 能與其他直線組成的三角形個數即為:
\[\begin
\frac\sum_c_\times (n-c_-c_)&=\frac\sum_(c_\times (n-c_)-c_^2)\\
&=\frac((n-c_)\sum_c_-\sum_c_^2)\\
&=\frac((n-c_)^2-(\sum_c_^2-c_^2))
\end
\]將斜率離散化,預處理出 \(\sum_c_^2\) ,列舉 \(l\) 。
因為最後每個三角形都會被計算 \(3\) 次,所以最後答案還要除以 \(3\) 。
\(\text:\)
#include #include #include #include using namespace std;
const int maxn=3e5+5;
typedef long long lxl;
template inline void read(t &x)
while(ch>='0'&&ch<='9')
x*=f;
}int n;
double k[maxn],b[maxn];
int a[maxn];
lxl cnt[maxn],sum;
int main()
sort(b+1,b+n+1);
int m=unique(b+1,b+n+1)-b-1;
for(int i=1;i<=n;++i)
for(int i=1;i<=m;++i)
sum+=cnt[i]*cnt[i];
lxl ans=0;
for(int i=1;i<=n;++i)
ans+=1ll*((n-cnt[a[i]])*(n-cnt[a[i]])-(sum-cnt[a[i]]*cnt[a[i]]));
printf("%lld\n",ans/6ll);
return 0;
}
用平衡樹模擬進站過程,每次找到隊尾元素編號大於進站編號的佇列中隊尾元素編號最小的佇列,進入這個佇列,若不存在這樣的佇列,則進入乙個新的佇列。
因為只有隊尾的元素會產生影響,所以只需要儲存隊尾元素編號即可。支援查詢前驅和單點修改,使用平衡樹即可。
\(\text:\)
#include #include #include #include #include #include using namespace std;
const int maxn=1e5+5;
template inline void read(t &x)
while(ch>='0'&&ch<='9')
x*=f;
}int n;
struct node
node(){}
}*root,*null,*st[maxn<<2],tt[maxn<<2];
const int ratio=4;
int cnt;
#define new_node(a,b,c,d) (&(*st[cnt++]=node(a,b,c,d)))
#define merge(a,b) new_node(a->siz+b->siz,b->val,a,b)
inline void update(node *p)
inline void rotate(node *p)
void insert(node *p,int d)
else insert(p->ls->val>=d ? p->ls : p->rs,d);
update(p);rotate(p);
}void erase(node *p,int d)
int kth(node *p,int k)
int rnk(node *p,int d)
int nxt(int d)
void print(node *p)
inline void init()
int main()
// print(root);puts("");
} printf("%d\n",root->siz-1);
return 0;
}
這題我人都傻了,題解還沒有證明它的正確性……
考場上寫了個隨機化演算法拿了10pt/kk。
題解:至於為什麼這樣做是對的,打死出題人就知道了 。
\(\text:\)
#include #include #include #include #include #include #include #define rint register int
#define inf 0x3f3f3f3f
using namespace std;
typedef long long lxl;
const int maxn=405,maxm=5e4+5;
template inline void read(t &x)
while(ch>='0'&&ch<='9')
x*=f;
}struct edge
edge(){}
}e[maxm];
inline bool cmp_g(const edge &a,const edge &b)
return cnt==n-1?maxg+maxs:llong_max;
}vectorvec[2];
int main()
sort(e+1,e+m+1,cmp_g);
lxl ans=llong_max;
for(int i=1;i<=m;++i)
printf("%lld\n",ans);
return 0;
}
測試 20201028測試總結
教練終於考noip模擬題了。真 簽到題,直接使用math庫函式即可。text include include include include include using namespace std typedef long long lxl define getchar p1 p2 p2 p1 bu...
測試 20200912測試總結
考完後的心情 簡單dp題,沒處理邊界,100 to 70 令 f 表示使得 a 串前 i 位變換到 b 串前 j 位的最小花費,則有轉移 text memset f,0x3f,sizeof f f 0 0 0 for int i 0 i n i for int j 0 j m j printf d ...
2020 10 12 Verilog學習總結
1.結構說明語句 1 initial 只執行一次 2 always語句 多次執行 1.常用always生成時鐘激勵訊號 always clk period 2 clk clk 每過半個週期時鐘翻轉一次2.always邊沿觸發 always posedge clk or negedge rst 在cl...