赞
踩
发挥还行,约了三五好友一起打,不过有点晚,该睡了,睡前简单写一波题解,明天记得补题
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,提交!睡觉!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。