2022“杭电杯”中国大学生算法设计超级联赛(2)补题
2022“杭电杯”中国大学生算法设计超级联赛(2)补题1002 C++ to Python签到题,输出(,数字)即可
1007 Snatch Groceries区间合并
12345678910111213141516171819202122232425262728293031323334#include <bits/stdc++.h>#define int long longconst int maxn = 1e5 + 10;using namespace std;struct node { int l, r; bool operator < (const node &x) const { if (l == x.l) return r < x.r; return l < x.l; }}a[maxn];signed main() { ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); int t; cin >> t; while (t--) { int n; cin >> n ...
2022“杭电杯”中国大学生算法设计超级联赛(1)补题
2022“杭电杯”中国大学生算法设计超级联赛(1)补题1011 Random[0,1]生成n个数,m次操作,每次有1/2概率删除最大值,1/2概率删除最小值,问最终期望总和模1e9+7
思路:答案是(n-m)/2,即(n-m)*inv(2)
1234567891011121314151617181920212223242526272829#include<bits/stdc++.h>using namespace std;typedef long long ll;#define endl '\n'#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);const int mod=1e9+7;ll ksm(ll a,ll b){ ll ans=1,base=a%mod; while(b){ if(b&1) ans=ans*base%mod; base=base*base%mod; b>>=1; } r ...
咕了好长一段时间呢
近期所学最长上升子序列nlogn的做法思路:维护一个递增数组,长度相同的LIS只存终点的最小值
123456789101112int lengthOfLIS(vector<int>& nums){ int n=nums.size(); vector<int> vec; for(int i=0;i<n;i++){ int p=lower_bound(vec.begin(),vec.end(),nums[i])-vec.begin(); if(p==vec.size()) vec.push_back(nums[i]); else vec[p]=nums[i]; } return vec.size();}
同类问题:给出一个由字符 ‘0’ 和 ‘1’ 组成的字符串 S,我们可以将任何 ‘0’ 翻转为 ‘1’ 或者将 ‘1’ 翻转为 ‘0’,返回使 S 单调递增的最小翻转次数
最近接触了很多可以转换成lis问题的dp题,感觉很神奇,就比如牛客的一道叫免费馅饼的题,可以通过旋转坐标轴,求 ...
用c++编写文字小游戏的一个小尝试
代码懒得写函数了😅
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980#include<bits/stdc++.h>#include<windows.h>#include<stdlib.h>using namespace std;int main(){ char c[100],j,s[100]; int num=-1; char wz[100]="平平无奇的生活 by yujingsea\n"; for(int i=0;i<strlen(wz);i++){ cout<<wz[i]; if(wz[i]>='a'&&wz[i]<='z') Sleep(120); else Sleep(120); } Sleep(250); printf("输入a开始 ...
题型整理(5)
题型整理(5)n点坐标求多边形面积用计算几何的叉积解决
12345678910111213141516171819202122232425#include<iostream>#include <cstdio>using namespace std;struct point{ int x,y;};int main(){ int n; while(~scanf("%d",&n)){ if(n == 0) break; point a[101]; for(int i = 0;i < n;i++){ cin >> a[i].x; cin >> a[i].y; } double ans = 0; for(int i = 2;i < n;i++){ int x1 = a[i-1].x - a[0].x,y1 = a[i-1].y - a[0].y; ...