记单词 1h
在b站上看视频学c++ 1h
(原本是打算看两三个小时的,然后看着看着感觉有点集中不了精神了,就不看太久了)
复习并查集和二叉树,对照自己的题解把洛谷上做过的题再重新思考,尝试重新写一遍 3h
进行周测+答辩 3h
这次周测的题感觉题目翻译过来后描述有问题,光是看懂都比较费力,最后完成了三道题。
前两道入门级难度的就不说了,这里说说普及难度的题吧:
[B1] Alice Wins! (easy version) - 洛谷
有A,B两个队伍,各有2n个人,按序号分别进行猜拳,你最多可以分别在A,B两个队伍中改变n个人的猜拳方案,使得A队得分最高。
你会发现,事实上一个队伍一共就2n个人,可以先把A队改成至少n人获胜,再把B队改成至少n人失败,也就是说A队的最大得分一定是满分。
明白这点后只要考虑“怎么安排A队n个修改为获胜的人和B队n个修改为失败的人”就行了
#include<stdio.h>
int t,a[2][200010],book[200010],sum=0;
int main()
{
scanf("%d",&t);
int i,j,k,k1=0;
for(i=0;i<t;i++)
{
int n;
scanf("%d",&n);
for(j=0;j<2;j++)
for(k=0;k<2*n;k++)
scanf("%d",&a[j][k]);
for(k=0;k<2*n;k++)
{
if(k < n)
{
if (a[1][k] == 1)
a[0][k] = 3;
if (a[1][k] == 2)
a[0][k] = 1;
if (a[1][k] == 3)
a[0][k] = 2;
}
if(k >= n)
{
if (a[0][k] == 1)
a[1][k] = 2;
if (a[0][k] == 2)
a[1][k] = 3;
if (a[0][k] == 3)
a[1][k] = 1;
}
}
printf("%d\n",2*n);
for(j=0;j<2;j++)
{
for(k=0;k<2*n;k++)
printf("%d ",a[j][k]);
printf("\n");
}
// for(j=0;j<=2*n;j++)
// {
// book[j]=0;
// }
}
return 0;
}