05 2021 档案

摘要:水题。 struct Fraction { int up,down; bool operator<(const Fraction &W) const { return up * W.down < W.up * down; } }; vector<Fraction> res; int n; int m 阅读全文
posted @ 2021-05-31 19:49 Dazzling! 阅读(53) 评论(0) 推荐(0) 编辑
摘要:贪心。 对于第i个数字,若其不在应在位置,则在[i+1n]中寻找恰好存在与第i个数错位的数,交换两个位置上的数;若不存在恰好错位的数,则选择与第i个数相等且不在应在位置的数交换。 const int N=1010; int a[N],b[N]; int cnt[4]; i 阅读全文
posted @ 2021-05-31 19:23 Dazzling! 阅读(43) 评论(0) 推荐(0) 编辑
摘要:暴搜水题~ 。 const int N=30; int need[N]; int feed[20][N]; int res[N]; vector<int> path,ans; int n,m; bool check() { for(int i=1;i<=n;i++) if(res[i] < need 阅读全文
posted @ 2021-05-31 10:02 Dazzling! 阅读(18) 评论(0) 推荐(0) 编辑
摘要:3577. 选择数字 签到。 int main() { cin>>n; for(int i=0;i<n;i++) cin>>a[i],vis[a[i]]=true; cin>>m; for(int i=0;i<m;i++) cin>>b[i],vis[b[i]]=true; for(int i=0; 阅读全文
posted @ 2021-05-30 23:51 Dazzling! 阅读(23) 评论(0) 推荐(0) 编辑
摘要:思路 思路同k倍区间。 前缀积得到每个点的正负。枚举右端点r,统计满足s[r]s[l1]同号的左端点l的数目,s[r]s[l1]同号则s[lr]为正。s[lr]为负的区间数量同理。 const int N=2e5+10; int a[N 阅读全文
posted @ 2021-05-27 12:29 Dazzling! 阅读(41) 评论(0) 推荐(0) 编辑
摘要:数字本身为质数,且其所有前缀数字均为质数。 思路 枚举每一位 首位只能从2,3,5,7选取 其余位只能从1,3,5,7中选取 int n; bool isprime(int x) { if(x < 2) return false; for(int i=2;i*i<=x;i++) if 阅读全文
posted @ 2021-05-26 19:41 Dazzling! 阅读(55) 评论(0) 推荐(0) 编辑
摘要:思路一 筛出107以内素数 判断素数表中的数是否为回文数 注意点 如果一个回文数的位数是偶数,则它的奇数位上的数字和与偶数位上的数字和必然相等,这样的数能被11整除,不可能是素数(11自己除外)。 由上条性质,素数表只要筛到107即可。 USACO上提交居然MLE?遂放弃记录素数表,直接 阅读全文
posted @ 2021-05-26 15:59 Dazzling! 阅读(113) 评论(0) 推荐(0) 编辑
摘要:思路 将32位二进制数转换为十进制数,用long long存储n+1n+3的结果(不超过33位),再将结果转成二进制即可。 void solve(LL n) { for(int i=32;i>=0;i--) { int t=n>>i & 1; if(i == 32 && !t) c 阅读全文
posted @ 2021-05-25 21:27 Dazzling! 阅读(33) 评论(0) 推荐(0) 编辑
摘要:经典问题,直接暴搜出所有方案即可。 const int N=25; bool vis[N][N][N]; int a,b,c; vector<int> ans; void dfs(int x,int y,int z) { if(vis[x][y][z]) return; vis[x][y][z]=t 阅读全文
posted @ 2021-05-25 09:36 Dazzling! 阅读(25) 评论(0) 推荐(0) 编辑
摘要:预处理出双平方数集合 枚举双平方数中的一对数作为等差数列的首项和第二项 剪枝: 计算出当前等差数列的末项,last=x+(n-1)*d比双平方数集合中最大的数还要大,则无需判断其是否能构成长度为n的等差数列。 如果当前公差比双平方数集合中最大的数还要大,那么比当前公差还要大的公差显然也没有枚举的 阅读全文
posted @ 2021-05-24 19:46 Dazzling! 阅读(68) 评论(0) 推荐(0) 编辑
摘要:将1n2放置在n×n的棋盘当中,要求当前格子中的数字与其四连通的格子中的数字不相邻。 考虑将当前格子染成黑色,与其四连通的格子染成白色,即下标(i,j)的格子,当i+j为偶数时染成黑色,i+j为奇数时染成白色,则颜色不同的格子中的数字不能相邻。 按从左至 阅读全文
posted @ 2021-05-24 12:53 Dazzling! 阅读(46) 评论(0) 推荐(0) 编辑
摘要:统计满足i<j并且ajai=ji的数对的数量。 变形,ajj=aii。 开哈希表,对原数组扫描一遍即可。 const int N=2e5+10; int a[N]; int n; int main() { int T; cin>>T; while(T--) { cin 阅读全文
posted @ 2021-05-24 12:36 Dazzling! 阅读(43) 评论(0) 推荐(0) 编辑
摘要:货仓选址变形题。 将所有星号聚拢到中间的星号上,总花费最小。 移动每个星号的花费是其与中间星号间的距离并减去二者之间的星号数量。 const int N = 1e6+10; char s[N]; int a[N]; int n; int main() { int T; cin >> T; while 阅读全文
posted @ 2021-05-24 12:30 Dazzling! 阅读(32) 评论(0) 推荐(0) 编辑
摘要:模拟。 string s,t; int m; int main() { cin>>s>>m; while(m--) { string op; cin>>op; if(op == "COPY") { int l,r; cin>>l>>r; t=s.substr(l,r-l+1); } else if( 阅读全文
posted @ 2021-05-23 19:37 Dazzling! 阅读(53) 评论(0) 推荐(0) 编辑
摘要:找出所有约数,约数x所在的第x行存在一个m需满足条件: x不超过n m/x不超过n。 int n, m; int main() { int T; cin >> T; while(T--) { cin >> n >> m; vector<int> divisor; for( 阅读全文
posted @ 2021-05-23 19:26 Dazzling! 阅读(33) 评论(0) 推荐(0) 编辑
摘要:零比特填充法。 int main() { int T; cin >> T; while(T--) { string s; cin >> s; int cnt = 0; // 记录连续的1的个数 for(int i = 0; i < s.size(); i++) { if(cnt == 5) { cn 阅读全文
posted @ 2021-05-23 18:57 Dazzling! 阅读(43) 评论(0) 推荐(0) 编辑
摘要:只能操作长度不超过n的区间。 对1n所在的位置进行讨论: 若数组已经有序,则答案为0a[1]=1,只需选择[2,n]进行一次重排即可。同理,若a[n]=n,只需选择[1,n1]进行一次重排即可。 若a[1]=na[n]=1,则首先选择$[1,n-1] 阅读全文
posted @ 2021-05-21 20:22 Dazzling! 阅读(30) 评论(0) 推荐(0) 编辑
摘要:首先将数组a从小到大排序。 |a1x|+|a2x|++|anx||ana1|+|an1a2|++|an/2+1an/2|x位于ana1之间时,\(|a_1-x|+|a_n-x| \ge 阅读全文
posted @ 2021-05-19 11:35 Dazzling! 阅读(46) 评论(0) 推荐(0) 编辑
摘要:状态表示: f(i,a,b,c,d):到达第i个格子,所用卡片1数量为a张,卡片2数量为b张,卡片3数量为c张,卡片4数量为d张时能够获得的分数最大值。 状态转移: \[ f(i,a,b,c,d)=\max \begin{cases} f(i-1,a-1, 阅读全文
posted @ 2021-05-16 16:24 Dazzling! 阅读(79) 评论(0) 推荐(0) 编辑
摘要:先考虑没有娇姐发功怎么做。 考虑每只糖糖最后能不能存活:第i只糖糖能存活的条件是他后面没有比他大的另外一组的糖糖,所以我们只需要从后往前扫描维护当前位置往后每一组糖糖的最大值是多少然后和当前糖糖的能力值比较就行。 现在再来考虑娇姐发功的问题。 娇姐会在第ci秒使得前ci个人的能力值+ 阅读全文
posted @ 2021-05-15 16:46 Dazzling! 阅读(24) 评论(0) 推荐(0) 编辑
摘要:思路 通过对样例的模拟,发现答案为相邻两个蓝色石子中间最多的红色石子的数量。 双指针做法: const int N=1e5+10; int a[N],b[N]; int n,m; int main() { int T; cin>>T; while(T--) { cin>>n>>m; for(int 阅读全文
posted @ 2021-05-15 15:22 Dazzling! 阅读(74) 评论(0) 推荐(0) 编辑
摘要:b[i]表示第i个行第一列是否有雷,即b[i]的值只能为01。 一旦第i1行第一列的摆放情况确定,因为要满足8连通的格子里的数字限制,第i行第一列的摆放情况也随之确定。 递推式: b[i]=a[i1]b[i1]b[i2] $a[i 阅读全文
posted @ 2021-05-15 12:38 Dazzling! 阅读(32) 评论(0) 推荐(0) 编辑
摘要:首先将所有点按纵坐标从小到大排序,纵坐标相同的按横坐标从小到大排序,这样一来,每个点+x方向上最近的点(若存在)在排序后的数组宏一定相邻。 DFS搜索与当前点匹配的点,若当前点已经配对,则搜下一个点;若没有配对,则寻找还没有配对的点与当前点配对。 之后分别以每个点为起点进行DFS判环(每次判环前需要 阅读全文
posted @ 2021-05-12 15:35 Dazzling! 阅读(67) 评论(0) 推荐(0) 编辑
摘要:贪心。 经典问题。 注意点 不要忘记最后一个区间对最长连续挤奶时间区间的更新。 const int N=5010; PII a[N]; int n; int main() { cin>>n; for(int i=0;i<n;i++) cin>>a[i].fi>>a[i].se; sort(a,a+n 阅读全文
posted @ 2021-05-02 23:12 Dazzling! 阅读(90) 评论(0) 推荐(0) 编辑
摘要:按天数模拟。 const int N=110; int month[2][13]={ {0,31,28,31,30,31,30,31,31,30,31,30,31}, {0,31,29,31,30,31,30,31,31,30,31,30,31} }; int cnt[7]; int n; bool 阅读全文
posted @ 2021-05-02 22:24 Dazzling! 阅读(33) 评论(0) 推荐(0) 编辑
摘要:首先破环成链。 之后枚举n处断裂的位置,对于每次断裂形成的一串项链,采用双指针分别统计左边颜色连续的珍珠串长度和右边颜色连续的珍珠串长度。 const int N=355; char s[N<<1]; int n; int main() { cin>>n; scanf("%s",s); for( 阅读全文
posted @ 2021-05-02 22:10 Dazzling! 阅读(48) 评论(0) 推荐(0) 编辑
摘要:设minhn座山峰高度的最小值,maxhn座山峰高度的最大值。 枚举最终调整后的最低峰的高度为k,则最高峰的高度为k+17,对于低于最终最低峰高度的山峰或高于最终最高峰高度的山峰,对他们进行调整。 const int N=1010; int h[N]; int n; in 阅读全文
posted @ 2021-05-02 22:04 Dazzling! 阅读(39) 评论(0) 推荐(0) 编辑
摘要:最裸的暴力,时间复杂度:O(n3)。 const int N=110; int a[3],b[3]; int n; bool check(int c[],int a[]) { for(int i=0;i<3;i++) if(abs(a[i]-c[i]) > 2 && abs(a[i]-c[ 阅读全文
posted @ 2021-05-02 18:33 Dazzling! 阅读(38) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示