Codeforces Round #817 (Div. 4)

Posted yeah17981

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #817 (Div. 4)相关的知识,希望对你有一定的参考价值。

发挥还行,约了三五好友一起打,不过有点晚,该睡了,睡前简单写一波题解,明天记得补题

Dashboard - Codeforces Round #817 (Div. 4) - Codeforces

完成:abcde

f纯暴力实在是不爱写(全队代码能力最差是真的石锤),g太困了懒得看,看起来是bitset,明天再看一下,现在该去睡觉了

A:给字符串问是否为Timur 的全排列,直接记录了下每个字母的出现次数,结束

B:给俩字符串,有B和G和R,求蓝绿色盲看俩串是否一样,R标0,BG标1,看串是否一样

C:给仨人,每人出n个长度为3的不相同的字符串,如果俩人有一样的串各加1分,仨人不加分,只有自己有加一分,求总分。字符串相当于三位26进制数,换算成10进制,直接排序,找相同值的个数

#include<cstdio>  
#include<cstring>  
#include<algorithm>  
#include<iostream>  
#include<string>  
#include<vector>  
#include<stack>  
#include<cstdlib>  
#include<cmath>  
#include<set>  
#include<list>  
#include<deque>  
#include<map>  
#include<queue> 
#include<bitset>		
#include<limits.h>
using namespace std;
char s1[110],s2[110],s3[110];
struct XD
	int num,id;
;
XD a[3100];
int ans[4];
bool cmp(XD a,XD b)

	return a.num<b.num ;

int main()

	int n,m;
	cin>>n;
	while(n--)
	
		ans[1]=0,ans[2]=0,ans[3]=0;
		cin>>m;
		for(int i=1;i<=m;i++)
		
			cin>>s1;
			a[i].num=(s1[0]-'a')*26*26+(s1[1]-'a')*26+(s1[2]-'a')+1;
			a[i].id=1;
	
		
		for(int i=1;i<=m;i++)
		
			cin>>s2;

			a[i+m].num=(s2[0]-'a')*26*26+(s2[1]-'a')*26+(s2[2]-'a')+1;
			a[i+m].id=2;

		
		for(int i=1;i<=m;i++)
		
			cin>>s3;

			a[i+m*2].num=(s3[0]-'a')*26*26+(s3[1]-'a')*26+(s3[2]-'a')+1;
			a[i+m*2].id=3;
		
		sort(a+1,a+1+m*3,cmp);
		a[m*3+1].num =0;
//		for(int i=1;i<=m*3;i++)
//		
//			cout<<a[i].num<<" "<<a[i].id<<"\\n"; 
//		
		for(int i=1;i<=m*3;i++)
			if(a[i].num==a[i-1].num)
			
				if(a[i].num==a[i+1].num) i++;
				else
				
					ans[a[i].id]++;
					ans[a[i-1].id]++;
				
			
			else
			
				if(a[i].num!=a[i+1].num) 
				
					ans[a[i].id]+=3;
				
			
		
		cout<<ans[1]<<" "<<ans[2]<<" "<<ans[3]<<"\\n";
	  


D:给个长度为n的字符串,L表示向左看,R表示向右看,最多修改1-n个字母,求能看到的字母个数。(发现写麻烦了)统计初始值和修改差值,sort修改差值,结束

#include<cstdio>  
#include<cstring>  
#include<algorithm>  
#include<iostream>  
#include<string>  
#include<vector>  
#include<stack>  
#include<cstdlib>  
#include<cmath>  
#include<set>  
#include<list>  
#include<deque>  
#include<map>  
#include<queue> 
#include<bitset>		
#include<limits.h>
using namespace std;
char s1[200005];
int flag[200005];
int main()

	int n,m;
	cin>>n;
	while(n--)
	
	
		cin>>m;
		cin>>s1;
		long long ans=0;
		for(int i=0;i<m;i++)
		
			if(s1[i]=='L')
			
				ans+=i;
				if(i<m-i-1)
				
					flag[i]=m-i-1-i;
				
				else
				
					flag[i]=0;
				
			
			
			else
			
				ans+=m-i-1;
				if(i>m-i-1)
				
					flag[i]=i-(m-i-1);
				
				else
				
					flag[i]=0;
				
			
			
		
		sort(flag,flag+m);
		for(int i=m-1;i>=0;i--)
		
			ans+=flag[i];
			flag[i]=0;
			cout<<ans<<" ";
			
		
		cout<<"\\n";
	


网太卡这个写法甚至没能提交上去,我真的醉了

刚打完上面那句话网就上去了,过了,果然网站是需要吓一吓的,比赛的时候写着写着发现网卡了,正准备截图发群里说“大风车吱呀吱呀呀的转”,网好了,草

E:给m个长方形和q个询问,每个询问包含两个矩形,求给定矩形面积和,使得能把询问的小正方形完全包含并且被给定的大正方形完全包含。

二维数点,写过一次,主席树做法依旧没补,指路(51条消息) 代码源#464数数_yeah17981的博客-CSDN博客

#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
 
struct XD
	long long x,y,w;
	long long edge,id;
;
XD a[N];
long long tree[N];
long long maxy;
long long g[N];
long long ans[N][5];
void add(long long x,long long k,long long maxy)

    for(long long i=x;i<=maxy;i+=i&-i)
    
        tree[i]+=1ll*k;
    

long long ask(long long x)

    long long res=0;
    for(long long i=x;i;i-=i&-i)
    
        res+=tree[i];
    
    return res;
 

bool cmp(XD a,XD b)

	if(a.x==b.x)
	
		if(a.y==b.y)
		
			return a.id <b.id ;
		
		return a.y<b.y ;
		
	
	return a.x<b.x;
	

 
void solve()

	memset(tree,0,sizeof(tree)); 
	memset(g,0,sizeof(g)); 
	memset(ans,0,sizeof(ans)); 
	memset(a,0,sizeof(a));
	long long n,m,x1,x2,y1,y2;
	cin>>n>>m;
	for(long long i=1;i<=n;i++)
	
		cin>>a[i].x>>a[i].y;
		a[i].w=a[i].x*a[i].y;
		g[i]=a[i].y;
	 
	long long num=n;
	for(long long i=1;i<=m;i++)
	
	 	cin>>x1>>y1>>x2>>y2;
	 	x1+=1;
	 	x2-=1;
		y1+=1;
		y2-=1;
		a[++num].x=x1-1;
		a[num].y=y1-1;
		a[num].edge=1;
		a[num].id=i;
		g[num]=y1-1;
		
		a[++num].x=x2;
		a[num].y=y1-1;
		a[num].edge=2;
		a[num].id=i;
		g[num]=y1-1;
		
		a[++num].x=x1-1;
		a[num].y=y2;
		a[num].edge=3;
		a[num].id=i;
		g[num]=y2;
		
		a[++num].x=x2;
		a[num].y=y2;
		a[num].edge=4;
		a[num].id=i;
		g[num]=y2;
	
	sort(a+1,a+1+num,cmp);
	sort(g+1,g+num+1);
	long long maxy=unique(g+1,g+1+num)-g-1;
	for(long long i=1;i<=num;i++)
	
		if(!a[i].id)
		
			long long pos=lower_bound(g+1,g+1+maxy,a[i].y)-g;
			add(pos,a[i].w,maxy);
		
		else
		
			long long pos=lower_bound(g+1,g+1+maxy,a[i].y)-g;
			ans[a[i].id][a[i].edge]=ask(pos);
		
	
	for(long long i=1;i<=m;i++)
	
		cout<<ans[i][4]+ans[i][1]-ans[i][3]-ans[i][2]<<"\\n";
	

 
 
int main()

	std::ios_base::sync_with_stdio(false);
	cin.tie(NULL); cout.tie(NULL);
	long long _;
	cin>>_;
	while(_--)
	
		solve();
	
  

也不知道为啥网这么差,代码都复制不下来

还有五分钟比赛结束,无尽的等待……

不对啊,既然我要等到比赛结束发,我为啥刚刚不看看题捏,反正都睡不了,草,失策了

还有三分钟,感觉这个网不太支持我登上去看G题了,那就算了吧,快快结束,快快睡觉,QAQ

好困呜呜呜,中午没睡,希望我的除螨喷雾快点到,上床鼻子难受,不上床又困死了,呜呜呜呜呜

小小倒计时 3 2 1,提交!睡觉!

以上是关于Codeforces Round #817 (Div. 4)的主要内容,如果未能解决你的问题,请参考以下文章

Choosing The Commander CodeForces - 817E (01字典树+思维)

Codeforces Round #436 E. Fire(背包dp+输出路径)

[ACM]Codeforces Round #534 (Div. 2)

Codeforces 817F - MEX Queries

Codeforces 817

Imbalanced Array CodeForces - 817D (思维+单调栈)