- 博客(40)
- 收藏
- 关注
原创 CF round739(div3) VP
A-C 水D:思路考虑暴力匹配n与1−2601-2^{60}1−260中二的幂次数,可以O(n)求出n中有p个非连续数位可以匹配上x的p个前缀,则通过操作使n等于x的代价为len(n)−p+len(x)−plen(n)-p+len(x)-plen(n)−p+len(x)−p。#include <bits/stdc++.h>using namespace std;typedef long long ll;ll mi[63];ll f(ll x, ll p){ vector&
2022-01-09 20:09:19 373
原创 CF 1620 E. Replace the Numbers 构造
思路:反向思考,建立x到px的映射表,如果输入的指令是第一类,直接按照映射表插入px,如果输入的指令是第二类,修改映射表,将x的映射px改为py。最后逆序输出。#include <bits/stdc++.h>using namespace std;typedef long long ll;const int N = 1e7 + 7;int x[N], y[N], op[N];vector<int> p;int main(){ ios::sync_with_st
2022-01-09 18:34:17 248
原创 洛谷 P3803 FFT
思路:FFT模板#include <bits/stdc++.h>using namespace std;typedef long long ll;const double PI = acos(-1);const int N = 1e7 + 7;int n, m;int res, ans[N];int limit = 1;// 补齐的2的整数幂Nint L;// 二进制的位数int R[N];// 二进制翻转struct Complex{ double x, y;
2022-01-09 17:46:45 489
原创 Atc ABC234 A-E
A-D水E:暴力打表1-1e17#include <bits/stdc++.h>using namespace std;typedef long long ll;ll mi[20];ll dfs(ll dep,ll d,ll now){ if (now > 9 || now<0)return -1; if (dep == 0)return now; ll res = dfs(dep - 1, d, now + d); if (res ==
2022-01-08 21:09:04 266
原创 CF 1616 C. Representative Edges
思路:O(n3)O(n^3)O(n3)枚举所有公差#include <bits/stdc++.h>using namespace std;typedef long long ll;double a[30000];bool equal(double a, double b){ if (abs(a - b) <= 1e-6)return 1; return 0;}void solve() { int n; cin >> n;
2022-01-08 19:53:38 531 1
原创 CF 1623 C. Balanced Stone Heaps 二分
思路:二分检验答案#include <bits/stdc++.h>using namespace std;typedef long long ll;int a[200005],b[200005];int add[200005];int n;bool check(int t){ fill(add, add + 1 + n, 0); for (int i = 1;i <= n;i++)b[i] = a[i]; for (int i = n;i >=
2022-01-07 21:00:56 318
原创 洛谷 P4145 分块
思路:暴力开根号,全为1的块打上标记#include <bits/stdc++.h>using namespace std;typedef long long ll;ll n, m;const int N = 1e5 + 7;ll a[N],ed[N],st[N],pos[N],block,t,tag[N];void build(){ block = sqrt(n); t = n / block; if (n % block)t++; for (i
2022-01-07 20:25:46 109
原创 洛谷P2801 教主的魔法 分块
思路:分块#include <bits/stdc++.h>using namespace std;typedef long long ll;const int N = 1e6 + 5;int block, st[N], ed[N], pos[N], sum[N], add[N], a[N],d[N],n,m;void change(){ int l, r, k; cin >> l >> r >> k; int p = po
2022-01-07 19:52:57 76
原创 CF1600 E. Array Game 博弈论 双指针
思路:首先预处理出左右两端升序列的长度。考虑拿了i位置上的数后,当前数列左端和右端的数大小情况,如果两端的数都小于等于a[i]那么当前状态为毕败状态,如果只有一端的数大于a[i]a[i]a[i]跟据这一端升序列的长度,可以直接判断当前状态为比胜还是必败状态。如果两端的数都大于a[i]a[i]a[i],如果取较大的数,那么下次取数开始只能一直取那一端的数,如果取较小的数,重复以上过程可以O(n)O(n)O(n)判断所有状态。#include <bits/stdc++.h>using names
2022-01-07 03:52:45 210
原创 CF 1593 D2. Half of Same 数论
思路:暴力枚举所有数之差的所有因数,再检验所有数模该因数是否出现某一出现至少出现n/2次的余数. #include <bits/stdc++.h>using namespace std;typedef long long ll;int n;int a[200005];void fun(int x,vector<int> &v){ for(int i=1;i*i<=x;i++) { if(x%i==0) {
2022-01-07 02:42:42 156
原创 CF 1617 D2. Too Many Impostors 构造
思路:没三个连续的元素作为一组,查询n/3n/3n/3次。在所有的结果中必定至少有一组的结果为0,且至少有一组的结果为1;找到连续的两组(i,i+1,i+2),(i+3,i+4,i+5)满足前一组查询的结果为0,后一组查询的结果为1。然后查询(i+1,i+2,i+3),(i+2,i+3,i+4),根据以上四组结果的值我们可以在i-i+5的六个数中确定一个数一定为伪装者,确定另一个数为同伴。接下来尝试用每两次查询确定三个数的为伪装者还是同伴。根据之前n/3次查询的结果,我们再对每组数做两次额外的查询就可以确
2022-01-04 19:30:08 175
原创 CF1621 C. Hidden Permutations
思路:每个位置上出现的数字最终一定成为一个环,且若前一次查询中第i位置上的元素为xxx,则后一次查询时第i位置上的元素为PxP_xPx.那么我们可以利用这个性质在每个环中查找该环上的所有数,最多需要n+c次查询,c是一个小常数。#include <bits/stdc++.h>using namespace std;typedef long long ll;int ask(int x){ cout << "? " << x+1 << endl
2022-01-04 19:20:42 341
原创 2022.01.04 水题
CF1617 A. Forbidden Subsequence代码#include void solve(){string t,s;cin >> t >> s;sort(t.begin(), t.end());if (t.size() < s.size())cout << t << endl;else{if (s == “abc”){int cnt[26] = {};for (auto x : t){cnt[x - ‘a’]
2022-01-04 19:12:40 221
原创 CF 1598 D. Training Session 图论
思路:考虑用总方案数减去不符合要求的方案数,不符合要求的方案为选择的三个数恰好有两个数a[i]a[i]a[i]不同且恰好有两个数b[i]b[i]b[i]不同,先选定两个a[i]a[i]a[i]相同的数再选择b[i]b[i]b[i]相同的数即可得到答案#include <bits/stdc++.h>using namespace std;typedef long long ll;pair<ll,ll> p[200005];ll cnt1[200005],cnt2[200005
2022-01-03 21:13:22 214
原创 CF1540 A. Great Graphs 图论 构造
思路:最优结构为:首先按距离升序对节点排序,然后依次连接第1至n个节点,再在第i个节点与前i-1个节点上添加负权的回边,回边的权值为d[j]−d[i]d[j]-d[i]d[j]−d[i],最后求所有边的权值和。#include <bits/stdc++.h>using namespace std;typedef long long ll;ll a[200005];void solve(){ int n; cin>>n; for(int i=1;i&l
2022-01-03 15:43:35 228
原创 CF1483 A. Basic Diplomacy 构造 贪心
思路:首先任意选取每一天邀请的朋友,如果存在一个朋友被邀请超过m/2次,不断选择一个该朋友被邀请的一天,将这一天邀请的朋友调整为任意一个其他朋友直到这个朋友被邀请的天数恰好等于m/2。若无法将被邀请的天数调整至m/2说明答案不存在。#include <bits/stdc++.h>using namespace std;typedef long long ll;vector<int> v[100005];int cnt[100006],ans[100006];void so
2022-01-02 21:43:08 187
原创 CF1503 B. 3-Coloring 构造
题解:采用类似国际象棋网格的形式构造数的填法。假设将棋盘分为黑白色,尝试用1填满白色区域,2填满黑色区域,在两种颜色都未填满时,输入1,2,3时优先用1,2填满对应颜色。当其中一种颜色填满时,用剩余的颜色填完棋盘的剩余区域。#include <bits/stdc++.h>using namespace std;typedef long long ll;int ma[200][200];int n,flag=0;void out(int op,int x,int y){ co
2022-01-01 18:16:47 248
原创 CF1503 A. Balance the Bits 暴力贪心
题解:符合要求的01串需满足首尾为1且0,1的个数都为偶数。括号序列的构造:前k/2个1为左括号,后k/2个1为右括号,0位置上左右括号轮换。#include <bits/stdc++.h>using namespace std;typedef long long ll;char a[200005],b[200005];bool check(char *c){ stack<int> s; int i=0; while(c[i]) {
2022-01-01 18:12:52 595
原创 CF 1622D Shuffle 组合数学 构造
题解:枚举最左和最右发生改变的位置,可看作将j-i+1个位置上的1重新分配。如果末端位置的数为0,直接分配一个1,如果末端位置的数为1,分配一个零,然后将[c1+c0][c0]加给答案;代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;int mod=998244353;int C[5005][5005],pre[5005];int add(int x,int y){return (x+y)%mo
2021-12-29 15:18:25 1044
原创 CF1604 C. Di-visible Confusion(lcm)
#include <bits/stdc++.h>using namespace std;typedef long long ll;ll gcd(ll a,ll b){ ll sum=b==0?a:gcd(b,a%b); return sum;}ll lcm(ll a,ll b){ ll g=gcd(a,b); ll sum=a*b/g; return sum;}void solve(){ int n; scanf("%d"
2021-11-03 21:13:03 159
原创 CF 1476 D. Journey(线性dp)
#include <bits/stdc++.h>using namespace std;typedef long long ll;int dp[300050][2][2];string cc;void solve(){ int n; cin>>n; for(int i=0;i<=n;i++)dp[i][0][0]=dp[i][0][1]=dp[i][1][0]=dp[i][1][1]=0; cin>>(cc); dp
2021-11-03 20:01:04 111
原创 CF 1512 G. Short Task
#include <bits/stdc++.h>using namespace std;typedef long long ll;const int N=1e7+5;int p[N],d[N],ans[N];void solve(){ int n; scanf("%d",&n); printf("%d\n",ans[n]);}int main(){ fill(p,p+N,-1); p[1]=1; for(int i=2;i*
2021-10-26 16:52:27 71
原创 CF 1513 C. Add One
#include <bits/stdc++.h>using namespace std;typedef long long ll;ll dp[10][200060],mod=1e9+7;void solve(){ int n,m; scanf("%d %d",&n,&m); ll sum=0; while(n) { sum+=dp[n%10][m]; sum%=mod; n/=10;
2021-10-26 16:51:36 91
原创 CF 1526 C1. Potions (Easy Version)(二维背包dp)
#include <bits/stdc++.h>using namespace std;typedef long long ll;ll aa[2050],dp[2050][2050];int main(){ ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); ll n; cin>>n; memset(dp,-1,sizeof(dp)); dp[0][0]=0; for(ll
2021-10-23 17:04:05 242
原创 CF 1528 B. Kavi on Pairing Duty(dp,组合数学)
#include <bits/stdc++.h>using namespace std;typedef long long ll;ll dp[2000050],pre[2000050],mod=998244353,f[2000050];int main(){ for(int i=2;i<=2000000;i+=2) { for(int j=i;j<=2000000;j+=i)f[j]++; } int n; cin&g
2021-10-23 17:02:49 117
原创 CF 1536 C. Diluc and Kaeya(构造)
#define _CRT_SECURE_NO_WARNINGS#include <bits/stdc++.h>using namespace std;typedef long long ll;map<pair<int,int>,int> mp;int gcd(int x,int y){ return y==0?x:gcd(y,x%y);}void solve(){ int n; mp.clear(); scanf("%d",&
2021-10-23 17:01:33 206
原创 CF 1537 E1. Erase and Extend(构造)
#include <bits/stdc++.h>using namespace std;typedef long long ll;int main(){ ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); int n,k,ok=0; cin>>n>>k; char t[5006]; int ans=n; cin>>t; for(int len=1
2021-10-23 17:00:22 114
原创 CF 1535C Unstable String
#define _CRT_SECURE_NO_WARNINGS#include <bits/stdc++.h>using namespace std;typedef long long ll;ll aa[200005],bb[200005],n;ll f(ll *p){ ll cnt=0,sum=0; for(int i=0;i<=n;i++) { if(p[i]==0 || i==n){sum+=cnt*(cnt+1)/2;cnt=0;
2021-10-22 10:25:05 69
原创 CF 1519D Maximum Sum of Products
#define _CRT_SECURE_NO_WARNINGS#include <bits/stdc++.h>using namespace std;typedef long long ll;ll aa[200005],bb[200005],n;ll f(ll *p){ ll cnt=0,sum=0; for(int i=0;i<=n;i++) { if(p[i]==0 || i==n){sum+=cnt*(cnt+1)/2;cnt=0;
2021-10-22 10:22:12 84
原创 CF 1561D1 Up the Strip (simplified version)
#include <bits/stdc++.h>using namespace std;typedef long long ll;int main(){ ll n,p,t; cin>>n>>p; ll dp[200050],pre[200050]; dp[1]=1,pre[1]=1; for(ll x=2;x<=n;x++) { ll flag=0; t=sqrt(x);
2021-10-22 10:21:00 99
原创 CF 1538 F Interesting Function
#include <bits/stdc++.h>using namespace std;typedef long long ll;int main(){ int T; scanf("%d",&T); while(T--) { int l,r; scanf("%d %d",&l,&r); int sum=0; while(l!=0 || r!=0) {
2021-10-22 10:19:48 99
原创 CF 1553 D. Backspace(双指针 贪心)
#define _CRT_SECURE_NO_WARNINGS#include <bits/stdc++.h>using namespace std;typedef long long ll;void solve(){ string t,s; cin>>t>>s; int q=t.size()-1,p=s.size()-1; while(q>=0 && p>=0) { if(t[
2021-10-19 15:11:41 147
原创 CF 1555 D. Say No to Palindromes(构造)
#include <bits/stdc++.h>using namespace std;typedef long long ll;int main(){ ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); int n,m; cin>>n>>m; string t,s="abc"; cin>>t; vector<vector<int>
2021-10-19 15:09:51 79
原创 CF 1157 C. Moamen and XOR(dp)
#define _CRT_SECURE_NO_WARNINGS#include <bits/stdc++.h>using namespace std;typedef long long ll;ll mod=1e9+7;ll dp[200050][2];ll pw[200050];void init(){ pw[0]=1; for(int i=1;i<=200000;i++)pw[i]=pw[i-1]*2%mod;}void solve(){ ll
2021-10-19 15:08:47 93
原创 CCPC2021网络赛重赛 1010 Bigraph Extension
#include<bits/stdc++.h>using namespace std;typedef long long ll;vector<pair<ll,ll> >vp;ll uset[200005];ll find(ll x){ ll p=x,t; while(uset[p]!=p)p=uset[p]; while(x!=uset[x]) { t=uset[x]; uset[x]=p;
2021-10-10 20:04:38 498
原创 HDU 2222 Keywords Search(AC自动机)
#include <bits/stdc++.h>using namespace std;typedef long long ll;char tmp[1000005];struct AC{ int tr[500005][26],fail[500005],e[500005],cnt,root;//数组大小 int newnode() { for(int i=0;i<26;i++)tr[cnt][i]=-1; e[cnt]=0;.
2021-10-09 18:14:05 59
原创 CF 1594 C Make Them Equal
#include <bits/stdc++.h>using namespace std;typedef long long ll;const int N=300005;bool notprime[N]={};ll prime[N],k=0;void pr(){ notprime[1]=1; for(ll i=2;i<=300000;i++) { if(!notprime[i])prime[++k]=i; for(int
2021-10-09 12:03:58 117
原创 CF 1151 D Min Cost String
#include <bits/stdc++.h>using namespace std;typedef long long ll;int n,k;void f(int pos,int &id){ if(pos==k+1)f(0,id); if(id>=n)return; cout<<(char)('a'+pos); id++; if(id>=n)return; for(int i=1;i+pos<=k
2021-10-08 19:59:00 52
原创 POJ 3070 Fibonacci(矩阵快速幂)
#include <iostream>#include <string.h>using namespace std;typedef long long ll;int mod=10000;const int N=3;int n=2;int aa[N][N],tmp[N][N],res[N][N];void mul(int a[][N],int b[][N],int n){ memset(tmp,0,sizeof(tmp)); for(int i=1;i
2021-10-08 19:54:56 117
原创 HDU 5384 Danganronpa
#include <bits/stdc++.h>using namespace std;typedef long long ll;const ll N=6e5+6;string aa[N];string tmp;struct AC{ int tr[N][26],fail[N],e[N],cnt,root; ll newnode() { for(ll i=0;i<26;i++)tr[cnt][i]=0; e[cnt++]=
2021-10-08 18:43:05 83
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人