曾记否,到中流击水,浪遏飞舟。|

Moyyer_suiy

园龄:2年8个月粉丝:4关注:18

2024/10/24 记录

明天就不上学了直接出发,后天是是 csp,大概没有什么事情做,摆摆摆!

上午没事干,写了儒略日,虽然写的很慢而且分讨的很愚蠢并且写了近 2h,但最后改成 long long 就过了,比较开心。

机房里分享的思维题(P9789 [ROIR 2020 Day 2] ATM),看了一眼,但是我没有思维,于是就直接看了题解,想了想不是很懂就不想了(不知道以后还会看吗(

随机看了两道简单 dp,因为发现自己的相关思维已经退化到类似于初始化的地步了。简单题不大会,很开心的看题解捋思路。

坐等吃饭,今天的主要任务是下午的模拟赛,争取晚上把题补完,写写板子啥的,就可以了。


下午的模拟赛,不是很有意思,对正式比赛的时间分配啥的也没有任何参考价值,最后甚至成 IOI 赛制了,感觉没有什么意义。该会的会,不会的就是不会,能补就补一些吧:

A.等价数字串

Code
#include<bits/stdc++.h>
using namespace std;
int T,n;
char s[120];
int vis[12];
void solve(){
	scanf("%d",&n);
	cin>>s+1;
	int flg=1;
	for(int i=1;i<=n;i++){
		if(s[i]!='0'&&s[i]!='1'){
			flg=0;
			break;
		}
	}
	if(flg){
		puts("-1");
		return;
	}
	for(int i=1;i<=n;i++){
		int t=s[i]-'0';
		if(t==0||t==1) continue;
		if(t==2) vis[2]++;
		if(t==3) vis[2]++,vis[3]++;
		if(t==4) vis[2]+=3,vis[3]++;
		if(t==5) vis[2]+=3,vis[3]++,vis[5]++;
		if(t==6) vis[2]+=4,vis[3]+=2,vis[5]++;
		if(t==7) vis[2]+=4,vis[3]+=2,vis[5]++,vis[7]++; 
		if(t==8) vis[2]+=7,vis[3]+=2,vis[5]++,vis[7]++;
		if(t==9) vis[2]+=7,vis[3]+=4,vis[5]++,vis[7]++;
	}
	while(vis[7]>0){
		vis[7]--,vis[5]--,vis[3]-=2,vis[2]-=4;
		printf("7");
	}
	while(vis[5]>0){
		vis[5]--,vis[3]--,vis[2]-=3;
		printf("5");
	}
	while(vis[3]>0){
		vis[3]--,vis[2]--;
		printf("3");
	}
	while(vis[2]>0){
		vis[2]--;
		printf("2");
	}
	puts("");
}
int main(){
	scanf("%d",&T);
	while(T--){
		solve();
	}
}

B.字符串排序

被嘲讽为啥 t2 挂了。后来发现是比较字典序时我没有考虑只要有一个位置能比别的串该位置大就行了。额,希望后天不要犯这种脑瘫错。非常感谢 zcl 直接把码发过来了(

Code
#include<bits/stdc++.h>
using namespace std;
const int N=2e3+5;
int n,m;
int ans;
char c[N][N];
int vis[N];
int main(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++) cin>>c[i]+1;
	for(int i=1;i<=m;i++){
		int flg=0;
		for(int j=2;j<=n;j++){
			if(c[j][i]<c[j-1][i]){
				if(!vis[j]){
					ans++;
					flg=1;
					break;
				}
			}
		}
		if(flg) continue;
		for(int j=2;j<=n;j++) if(c[j][i]>c[j-1][i]) vis[j]=1;
	}
	printf("%d",ans);
}

C.Vincent 与游戏

感觉我真的变得好呆。zcl 说之前科学营做过这道题,并让我去找。然而我一点印象也没有,甚至也没有写博客,这太不好了。直接把码贴过去了。额。

感觉不太好想,这个状态转移。设 f[i][j] 表示,能够合并出来 i 这个数并且以 j 作为这个数的左端点,这样一个数的右端点的位置。于是转移:f[i][j]=f[i-1][f[i-1][j]]

但是 oj 上的数据再强一些,参考这个:link

然后伟大的 @drowsylve 给我改了一下,写成滚动数组就好了。

Code
//95pts
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 3e6 +10;
int n;
ll ans;
int f[62][N];
int main() {
	int k;
	scanf("%d", &n);
	for(int i = 1; i <= n; i ++ ) {
		scanf("%d", &k);
		f[k][i] = i + 1;
	}
	for(int i = 2; i <= 60; i ++ ) {
		for(int j = 1; j <= n; j ++ ) {
			if(! f[i][j]) f[i][j] = f[i - 1][f[i - 1][j]];
			if(f[i][j]) ans = i;
		}
	}
	printf("%lld", ans);
}
Code
//100pts
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 3e6 +10;
int n;
ll ans;
int f[N],a[N];
int main() {
	int k;
	scanf("%d", &n);
	for(int i = 1; i <= n; i ++ ) {
		scanf("%d", &a[i]);
	}
	for(int i = 1; i <= 60; i ++ ) {
		for(int j = 1; j <= n; j ++ ) {
			if(a[j] == i) f[j] = j + 1;
			else if(f[j]) f[j] = f[f[j]];
			if(f[j]) ans = i;
		}
	}
	printf("%lld", ans);
}

D.异或

CF 703D. Mishka and Interesting sum

不是,哥们,学一次忘一次,我大概知道这个套路应该是啥个形状的,额,仅限于此。

正在学习,争取补题,争取争取。

upd on 10.28:补上了。详情见:静态区间数颜色问题

需要离散化。

Code
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
int n,Q;
int a[N],s[N],b[N],tot;
map<int,int> vis;
int t[N],ans[N],lst[N];
struct node{int L,R,id;}q[N];
bool cmp(node x,node y){
	return x.R<y.R;
}
int lowbit(int x){
	return x&(-x);
}
void insert(int x,int v){
	while(x<=n){
		t[x]^=v;
		x+=lowbit(x);
	}
}
int query(int x){
	int res=0;
	while(x){
		res^=t[x];
		x-=lowbit(x);
	}
	return res;
}
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		scanf("%d",&a[i]);
		s[i]=s[i-1]^a[i];
		if(!vis[a[i]]){
			b[++tot]=a[i];
			vis[a[i]]=tot;
			a[i]=tot;
		}
		else a[i]=vis[a[i]];
	}
	scanf("%d",&Q);
	for(int i=1;i<=Q;i++){
		scanf("%d%d",&q[i].L,&q[i].R);
		q[i].id=i;
	}
	sort(q+1,q+Q+1,cmp);
	for(int i=1,top=1;i<=n;i++){
		int t=a[i];
		if(lst[t]) insert(lst[t],b[a[i]]);
		insert(i,b[a[i]]);
		lst[t]=i;
		while(top<=Q&&q[top].R==i){
			ans[q[top].id]=query(q[top].R)^query(q[top].L-1)^s[q[top].R]^s[q[top].L-1];
			top++;
		}
	}
	for(int i=1;i<=Q;i++) printf("%d\n",ans[i]);
	return 0;
}

为什么这一级的小朋友这么爱唱歌,开始大合唱唱芳园何青青了。

ber,这一级咋这么魔怔,和我们那级一点也不像。

甚至有伴奏((

本文作者:Moyyer_suiy

本文链接:https://www.cnblogs.com/Moyyer-suiy/p/18499310

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Moyyer_suiy  阅读(7)  评论(0编辑  收藏  举报
历史上的今天:
2023-10-24 鲜花 - 1
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起