zoukankan      html  css  js  c++  java
  • cf1189解题报告

    cf1189div2解题报告

    codeforces

    A

    答案要不是一串要不就是去掉最后一个字母的两串

    #include <bits/stdc++.h>
    #define ll long long
    using namespace std;
    const int N=107;
    int a[N<<2],n;
    int main() {
    	scanf("%d",&n);
    	int js=0;
    	for(int i=1;i<=n;++i) {
    		scanf("%1d",&a[i]);
    		js+=a[i];
    	}
    	if(n!=1&&js==n-js) {
    		printf("2
    ");
    		for(int i=1;i<n;++i) printf("%d",a[i]);
    		printf(" ");
    		printf("%d",a[n]);
    	} else {
    		printf("1
    ");
    		for(int i=1;i<=n;++i) printf("%d",a[i]);
    	}
    	return 0;
    }
    

    B

    cf好喜欢构造呀。
    (1-3-5-7-9-10-8-6-4-2)
    这样构造应该是最优解。
    然后check输出

    #include <bits/stdc++.h>
    #define ll long long
    using namespace std;
    const int N=2e5+7;
    int n,a[N],b[N];
    int main() {
    	scanf("%d",&n);
    	for(int i=1;i<=n;++i) {
    		scanf("%d",&a[i]);
    	}
    	sort(a+1,a+1+n);
    	int js=0;
    	for(int i=1;i<=n;i+=2) b[++js]=a[i];
    	for(int i=(n&1)?n-1:n;i>=1;i-=2) b[++js]=a[i];
    	b[0]=b[n],b[n+1]=a[1];
    	for(int i=1;i<=n;++i)
    		if(b[i]>=b[i-1]+b[i+1]) return puts("NO"),0;
    	puts("YES");
    	for(int i=1;i<=n;++i)
    		printf("%d ",b[i]);
    	return 0;
    }
    

    C

    虽然有很短的代码,但我还是写了线段树,好傻逼啊

    #include <bits/stdc++.h>
    #define ls rt<<1
    #define rs rt<<1|1
    using namespace std;
    const int N=2e5+7;
    int n,m,ans,tot[N<<2],sum[N<<2];
    void build(int l,int r,int rt) {
    	if(l==r) {
    		scanf("%d",&tot[rt]);
    		return;
    	}
    	int mid=(l+r)>>1;
    	build(l,mid,ls);
    	build(mid+1,r,rs);
    	tot[rt]=(tot[ls]+tot[rs])%10;
    	sum[rt]=sum[ls]+sum[rs]+((tot[ls]+tot[rs])>=10);
    //	printf("sum[%d]=%d tot=%d
    ",rt,sum[rt],tot[rt]);
    }
    int query(int l,int r,int L,int R,int rt) {
    	if(L<=l&&r<=R) {
    		ans+=sum[rt];
    		return tot[rt];
    	}
    	int mid=(l+r)>>1;
    	if(L<=mid&&R>mid) {
    		int a=query(l,mid,L,R,ls);
    		int b=query(mid+1,r,L,R,rs);
    		if(a+b>=10) ans++;
    		return (a+b)%10;
    	} else if(L<=mid) return query(l,mid,L,R,ls);
    	else return query(mid+1,r,L,R,rs);
    }
    int main() {
    	scanf("%d",&n);
    	build(1,n,1);
    	scanf("%d",&m);
    	for(int i=1,l,r;i<=m;++i) {
    		scanf("%d%d",&l,&r);
    		ans=0;
    		int tmp=query(1,n,l,r,1);
    		printf("%d
    ",ans);
    	}
    	return 0;
    }
    

    D1

    使得一颗树上边的权值任意,只要不出现度数为2的点就行。

    #include <bits/stdc++.h>
    using namespace std;
    const int N=2e5+7;
    int n,ru[N];
    int main() {
    	scanf("%d",&n);
    	for(int i=1;i<n;++i) {
    		int l,r;
    		scanf("%d%d",&l,&r);
    		ru[l]++,ru[r]++;
    	}
    	for(int i=1;i<=n;++i)
    		if(ru[i]==2) return puts("NO"),0;
    	puts("YES");
    	return 0;
    }
    

    E

    [(a_i + a_j)(a_i^2 + a_j^2) equiv k mod p ]

    [a_i^3 + a_i^2a_j+a_ia_j^2 + a_j^3 equiv k mod p ]

    左右乘((a_i-a_j))

    [a_i^4 - a_j^4 equiv ka_i-ka_j mod p ]

    [a_i^4 - ka_i equiv a_j^4-ka_j mod p ]

    map统计答案就行了

    #include <bits/stdc++.h>
    #define ll long long
    using namespace std;
    const int N=3e5+7;
    int n,k,p,a[N];
    unordered_map<int,int> Hash;
    int pow4(int a) {return 1LL*a*a%p*a%p*a%p;}
    int main() {
    	scanf("%d%d%d",&n,&p,&k);
    	for(int i=1;i<=n;++i) scanf("%d",&a[i]);
    	ll ans=0;
    	for(int i=1;i<=n;++i) {
    		int tmp=((pow4(a[i])-1LL*k*a[i]%p)%p+p)%p;
    		ans+=Hash[tmp];
    		Hash[tmp]++;
    	}
    	cout<<ans<<"
    ";
    	return 0;
    }
    
  • 相关阅读:
    线性代数思维导图——3.向量
    微分中值定理的基础题型总结
    构造函数
    Python课程笔记(七)
    0241. Different Ways to Add Parentheses (M)
    0014. Longest Common Prefix (E)
    0013. Roman to Integer (E)
    0011. Container With Most Water (M)
    0010. Regular Expression Matching (H)
    0012. Integer to Roman (M)
  • 原文地址:https://www.cnblogs.com/dsrdsr/p/11163959.html
Copyright © 2011-2022 走看看