题解:
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 20000
using 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。