2023/4/4总结
题解:
Problem A - Codeforces
1.这道题目我们需要判断。
2.如果是奇数,亦或出来的总值不为0,那么每一个数字再去亦或任何一个数字,都不会为0。
3.如果是偶数并且亦或总值为0,那么我们亦或的总值不满足条件,我们需要构造一个数字,这个数字不会影响它们最终为0。我构造的数字是与上所有的值这个是不会改变的。
4.如果是其他情况就是最后亦或的总值。
#include<stdio.h>
#define N 1010
int a[N];
int main()
{int t,n,i,sum,k;scanf("%d",&t);while(t--){sum=0;k=0;scanf("%d",&n);for(i=0;i<n;i++){scanf("%d",&a[i]);sum^=a[i];k=k|a[i];}if(sum!=0&&n%2==0){puts("-1");}else if(sum==0&&n%2==0){printf("%d\\n",k);}else printf("%d\\n",sum);}return 0;
}
Problem - B - Codeforces
1.这个题目 其实就是出现得最小得字母,把它放在前面。因为字典序最小嘛。
#include<stdio.h>
#include<math.h>
#include<string.h>
#define N 100010
char a[N],b[N];
int main()
{ int t,c,k,n,i;scanf("%d",&t);while(t--){c='z';k=-1;scanf("%d",&n);scanf("%s",a);for(i=strlen(a)-1;i>=1;i--){if(a[i]<c){c=a[i];k=i;}}if(k>=1&&c<=a[0]){printf("%c",c);strcpy(b,a+k+1);a[k]=0;printf("%s",a);printf("%s",b);}else printf("%s",a);printf("\\n");}
}
线段树OR树状数组 - Virtual Judge (vjudge.net)
1.这道题目我刚开始的想法是,排序,去重,离散化,然后从后面的海报开始贴起来,往前推,如果这个节点已经贴过就不贴,因为在前面的肯定会被覆盖。
2.然后好不容易写出来,TLE了(按理说应该不会这样的)。
3. 然后老老实实从前面开始贴,计数。
4.离散化有一点需要注意,如果数据是
1 10
1 3
6 10
这是三个海报,但是如果离散化,就会变成2个海报。导致出错,我看了别人的博客,建议是初始值的时候右边坐标全部+1,访问的时候离散化的值减去1即可。
代码如下:
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#define N 10005
#define maxn 20000using namespace std;int T,n,cnt,num,ans;
int l[N],r[N];
bool t[maxn];int mark[4*maxn];
struct node
{int num,id,p;
}a[2*N];
bool cmp(node x,node y)
{if (x.num!=y.num) return x.num<y.num;else return x.id<y.id;
}
void change(int v,int l,int r,int x,int y,int k)
{if (l==x&&r==y){mark[v]=k;return;}if (mark[v]>0){mark[v<<1]=mark[v];mark[1+(v<<1)]=mark[v];mark[v]=0;}int mid=(l+r)>>1;if (mid>=y) change(v<<1,l,mid,x,y,k); else if (x>mid) change(1+(v<<1),mid+1,r,x,y,k); else{change(v<<1,l,mid,x,mid,k);change(1+(v<<1),mid+1,r,mid+1,y,k);}
}
void find(int v,int l,int r)
{int mid=(l+r)>>1;if (l==r){if (!t[mark[v]]){t[mark[v]]=true;ans++;}return;}if (mark[v]>0){mark[v<<1]=mark[v];mark[1+(v<<1)]=mark[v];mark[v]=0;}find(v<<1,l,mid);find(1+(v<<1),mid+1,r);
}int main(){int i,s;scanf("%d",&T);while (T--){memset(mark,0,sizeof(mark));memset(t,0,sizeof(t));cnt=0;scanf("%d",&n);for (i=1;i<=n;i++){scanf("%d%d",&l[i],&r[i]);a[++cnt].num=l[i]; a[cnt].id=i; a[cnt].p=cnt;a[++cnt].num=r[i]; a[cnt].id=i; a[cnt].p=cnt;}sort(a+1,a+1+cnt,cmp);num=1;for (i=2;i<=cnt;i++){s=a[i-1].id;if (a[i-1].p%2) l[s]=num;else r[s]=num;if (a[i].num!=a[i-1].num) num++;} s=a[cnt].id;if (a[cnt].p%2) l[s]=num;else r[s]=num;for (i=1;i<=n;i++)change(1,1,num,l[i],r[i],i);ans=0;find(1,1,num);printf("%d\\n",ans);}return 0;
}
JavaFX
学习了javafx的scene builder一点知识
stage表示窗口
scene表示场景
然后还有各种按钮之类的。
id表示名称
on Action表示行为(这俩个我觉得是很重要的点)
但是做出来的界面,不能结束进程。因为不会在controller类之间互转。然后其他功能,比如提交没写,还有就是忘记密码啥的也没搞,其实就是一个界面,也还没完善。
然后就是不小心把登录和注册写反了。(一定要注意文件路径,吃了大亏)
打算接下来学习mysql和maven。