首页 > 其他分享 >Educational Codeforces Round 2 个人总结A-E

Educational Codeforces Round 2 个人总结A-E

时间:2023-01-28 01:55:19浏览次数:62  
标签:Educational int big void Codeforces ra cnt Round op

Educational Codeforces Round 2

A. Extract Numbers

  • 简单的模拟
bool check(string op)
{
	if(op.size()==1&&op[0]=='0')
		return true;
	if(op.size()==0||(op[0]<'1'||op[0]>'9'))
		return false;
	bool st=false;
	for(int i=1;i<op.size();i++)
	{
		if( !(op[i]>='0'&&op[i]<='9'))
			st=true;
	}
	if(st)
		return false;
	else return true;
}
void solve()
{
	string op;	cin>>op;
	string t="";
	vector<string> a;
	int len=op.size();
	for(int i=0;i<len;i++)
	{
		if(op[i]!=','&&op[i]!=';')
			t=t+op[i];
		else
		{
			a.pb(t);
			t="";
		}
	}
	if(!t.empty())
		a.pb(t);
	if(op[op.size()-1]==','||op[op.size()-1]==';')
		a.pb("");
	vector<string> b,c;
	for(auto it:a)
	{
		if(check(it))
			b.pb(it);
		else 
			c.pb(it);
	}
 
	if(b.size()!=0)
	{
		cout<<"\"";
		len=b.size();
		for(int i=0;i<len;i++)
		{
			cout<<b[i];
			if(i!=len-1)
				cout<<",";
		}
		cout<<"\""<<endl;
	}
	else 
		cout<<"-\n";
	if(c.size()!=0)
	{
		cout<<"\"";
		len=c.size();
		for(int i=0;i<len;i++)
		{
			cout<<c[i];
			if(i!=len-1)
				cout<<",";
		}
		cout<<"\""<<endl;
	}
	else 
		cout<<"-\n";
 
    return;
}

B. Queries about less or equal elements

  • 二分查找板子
vector<LL> a,b;
void solve()
{
	int n,m;	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		int x;	cin>>x;
		a.pb(x);
	}
	sort(all(a));
	for(int i=1;i<=m;i++)
	{
		int x;	cin>>x;
		b.pb(x);
	}
	for(int i=0;i<m;i++)
	{
		int l=0,r=n-1;
		while(l<r)
		{
			int mid=(l+r+1)>>1;
			if(a[mid]<=b[i])	l=mid;
			else r=mid-1;
		}
		if(l==0&&b[i]<a[l])
			cout<<0<<" ";
		else 
			cout<<l+1<<" ";
	}
	cout<<endl;
 
 
    return;
}
 

C. Make Palindrome

  • 大意:输出使 s 为回文串,在操作次数最少的情况下,s 的字典序最小的字符串

  • 根据回文串的性质,若不是回文串,即有一个或多个字母个数为奇数,为使操作次数最少,即将这些单个字母取出来,有区间 \(b[l,...r]\)从两端进行修改操作,修改操作为 \(b[r]=b[l]\) \((l<r)\)

  • 将 \(b\) 放回 \(s\),重新构造一下就出来了

int cnt[30],n;
string op;
vector<int> b;
void solve()
{
    cin>>op;    n=op.size();
   
    for(int i=0;i<n;i++)
        cnt[int(op[i]-'a'+1)]++;

    for(int i=1;i<=26;i++)
        if(cnt[i]%2==1)
        {
            cnt[i]--;
            b.pb(i);
        }
    
    int l=0,r=b.size()-1;
    while(l<r)
        b[r]=b[l],l++,r--;
    
    for(auto it:b)
        cnt[it]++;

    string ans="";
    char t;
    for(int i=1;i<=26;i++)
    {
        int k=cnt[i]/2;
        if(cnt[i]%2==1)
            t=char('a'+i-1);
        while(k--)
            ans.pb(char('a'+i-1));
    }
    string res=ans;
    reverse(all(res));
    cout<<ans;
    if(n%2==1)
        cout<<t;
    cout<<res<<endl;

    return;
}

D. Area of Two Circles' Intersection

  • 高中数学知识,用到了正弦定理和余弦定理,然后可以试着去做
  • 这题WA34是由于精度原因,计算几何题要避免浮点数的子运算或加法

long double xa,ya,ra,xb,yb,rb;

void solve()
{
    cin>>xa>>ya>>ra>>xb>>yb>>rb;
    if(ra>rb)
    {
        swap(xa,xb);
        swap(ya,yb);
        swap(ra,rb);
    }
    long double len=sqrt((xa-xb)*(xa-xb)+(ya-yb)*(ya-yb));
    if(ra+rb<len)
        cout<<0<<endl;
    else if(rb>=len+ra)
    {
        long double ans=ra*ra*pi;
        cout<<setprecision(10)<<ans<<endl;        
    }
    else 
    {
        long double ang1=2.0*acos((len*len+rb*rb-ra*ra)/(2.0*len*rb));
        long double ang2=2.0*acos((len*len+ra*ra-rb*rb)/(2.0*len*ra));
        long double ans=ang1*rb*rb/2.0+ang2*ra*ra/2.0-0.5*sin(ang1)*rb*rb-0.5*sin(ang2)*ra*ra;
        cout<<setprecision(10)<<ans<<endl;        
    }

    return;
}

E. Lomsat gelral

是一道很入门的dsu,去找dls课看,或者oiwiki

//  AC one more times



////////////////////////////////////////INCLUDE//////////////////////////////////////////

#include <bits/stdc++.h>

using namespace std;
/////////////////////////////////////////DEFINE//////////////////////////////////////////

#define fi first
#define se second
#define pb push_back
#define endl '\n'
#define all(x) (x).begin(), (x).end()
#define inf64 0x3f3f3f3f3f3f3f3f

typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int, int> PII;
typedef pair<long long,long long> PLL;

////////////////////////////////////////CONST////////////////////////////////////////////

const int inf = 0x3f3f3f3f;
const int maxn = 2e6 + 6;
const double eps = 1e-8;


///////////////////////////////////////FUNCTION//////////////////////////////////////////

template<typename T>
void init(T q[], int n, T val){   for (int i = 0; i <= n; i++) q[i] = val;  }
int gcd(int a, int b) { return b == 0 ? a : gcd(b, a % b); }
bool cmp(int c, int d) { return c > d; }
//inline __int128 read(){__int128 x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-'){f=-1;}ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x*f;}
//inline void write(__int128 x){if (x < 0){putchar('-');x = -x;}if (x > 9) write(x / 10);putchar(x % 10 + '0');}
LL get_quick_mod(LL a,LL b,LL p){   LL ans=1%p;while(b){    if(b&1) {ans=ans*a%p;}  a=a*a%p,b>>=1;    }    return ans;  }


const int mod = 1e9+7;
const int N = 1e5+10;
const int M = 1e6+10;

int n,c[N],sz[N],big[N],id[N],l[N],r[N],tot;
vector<int> e[N];
LL cnt[N],maxcnt,sumcnt,ans[N];
void dfs1(int u,int fa)
{
	l[u]=++tot;
	id[tot]=u;
	sz[u]=1;
	big[u]=-1;
	for(int v:e[u])
	{
		if(v==fa)	continue;
		dfs1(v,u);
		sz[u]+=sz[v];
		if(big[u]==-1||sz[v]>sz[big[u]])
			big[u]=v;
	}
	r[u]=tot;
}
void add(int x)
{
	x=c[x];
	cnt[x]++;
	if(cnt[x]>maxcnt)	maxcnt=cnt[x],sumcnt=0;
	if(cnt[x]==maxcnt)	sumcnt+=x;
}
void del(int x)
{
	x=c[x];
	cnt[x]--;
}
void dfs2(int u,int fa,bool st)
{
	for(int v:e[u])
		if(v!=fa&&v!=big[u])
			dfs2(v,u,false);
	if(big[u]!=-1)
		dfs2(big[u],u,true);
	for(int v:e[u])
	{
		if(v!=fa&&v!=big[u])
			for(int x=l[v];x<=r[v];x++)
				add(id[x]);
	}
	add(u);	
	ans[u]=sumcnt;
	if(!st)
	{
		maxcnt=0;sumcnt=0;
		for(int x=l[u];x<=r[u];x++)
			del(id[x]);
	}
}
void solve()
{
	cin>>n;
	for(int i=1;i<=n;i++)
		cin>>c[i];
	for(int i=1;i<n;i++)
	{
		int u,v;	cin>>u>>v;
		e[u].pb(v);	e[v].pb(u);
	}
	dfs1(1,0);
	dfs2(1,0,false);
	for(int i=1;i<=n;i++)
		cout<<ans[i]<<" ";
	cout<<endl;
    return;
}

  
int main()
{
    std::ios::sync_with_stdio(false);   cin.tie(nullptr), cout.tie(nullptr);
    // 特殊输入 请注释上方,如__int128等
    int TC = 1;
    
    //cin >> TC;    
    for(int tc = 1; tc <= TC; tc++)
    {
        //cout << "Case #" << tc << ": ";         
        solve();
    }
    return 0;
}


标签:Educational,int,big,void,Codeforces,ra,cnt,Round,op
From: https://www.cnblogs.com/magicat/p/17069418.html

相关文章

  • #0031. Educational Codeforces Round 1
    AB简单题C是计算几何,但核心解法很像sgnoi某年的t1,即与其考虑所有pairs,不如只考虑所有相邻的,这样复杂度就从\(O(N^2)\)降到了O(N)(如果不考虑排序的复杂度的话)。不过这......
  • Educational Codeforces Round 142
    目录写在前面ABCDE写在最后写在前面比赛地址:https://codeforces.com/contest/1792。我是超级大鸽子咕咕咕A当且仅当有两个怪物初始血量为1时使用操作1,否则用操作2......
  • Codeforces Round #846 (Div. 2)
    题目链接D题意给定一个数字n,我们需要通过一系列的操作去猜测这个数字。初始的时候会给我们一个cnt,表示二进制下数字n有多少个1.每次我们可以给出一个t,然后另n减去t,系统......
  • Codeforces Round #601 (Div. 2) A-E
    比赛链接A题意给两个数字\(a,b\),每次操作可以使\(a\)加上\(+1,+2,+5,-1,-2,-5\)中的一个数,求最少多少次操作可以将\(a\)变成\(b\)。题解知识点:贪心。可以......
  • CodeForces 1415E New Game Plus!
    洛谷传送门CF传送门相当于将\(n\)个数分成\(k+1\)组,将每组的最大收益相加。容易发现组内的数不增最优。考虑开个堆,维护当前\(k+1\)组的和即可。code/*p_b_......
  • CodeForces 1415D XOR-gun
    洛谷传送门CF传送门纯纯的诈骗。下文令\(f(x)\)为\(x\)最高位使得这一位为\(1\)。考虑若存在\(i\in[1,n-2]\)使得\(f(a_i)=f(a_{i+1})=f(a_{i+2})\),那么......
  • Educational Codeforces Round 1
    A.TrickySum题意:给一个n,求1到n的运算,如果不是2的次方就加,否则减思路:由于n有1e9,直接暴力扫过去肯定要寄所以先$n*(n+1)/2$来算出1到n的和再减去2倍的2......
  • 1.27 vp Codeforces Round #845 (Div. 2) and ByteRace 2023
    A-EverybodyLikesGoodArrays!题意(构造)给出序列a,需要使a中元素以相邻元素奇偶性不同排列,你可以进行若干操作:将一对相邻奇偶性相同的元素相乘问最少需要多少次操作......
  • Codeforces 708 A-E1题解
    A.Meximization这道题问给一些数,如何让前缀的mex之和最大,那么首先,我们要抬mex的话肯定是要把前面都铺垫完的,所以在i位置确定的时候,i+1自然是越大越好,可以证明i+1的位......
  • Codeforces Round 846
    目录写在前面ABCDEF写在最后写在前面比赛地址:https://codeforces.com/contest/1780。执念就像是记错的二级结论一样可怕的东西。冥冥之中有一种结论错了的感觉,但总是觉......