重新振作第14天----忽如一夜春风来,千树万树梨花开
还是很离谱,作业写不完了要。我很讨厌写自己不喜欢的作业。而且也很烦,一堆乱七八糟的事情。越想越烦,越想越不想做,只想die,痛苦面具了都要。
pre 30mintues
应友人之邀,分享了一点东西
六级肯定是要准备的 2h
单词 100 个
阅读 3篇(没有,明天补)
范文看5篇(没有,明天补)
操作系统文献阅读+脑图 2h
看懂了,看完了,看明白了60+%的内容。因为有些很细节的地方,可以疯狂去扩展。所以在文献主要内容的理解方面,应该是50-70%之间,比如说设计概念和理论级实现,微操级实现这得有代码。
操作系统实验报告 1h
操作系统的实验,说实话,就比较水。说不上来,可能是培养体系的问题,大部分都是cv。而且课程也很满,都放到这个时候,想学也学不到啥东西。
操作系统思政报告 1.5 h
借助chat和网络图片以及相应的文献,花费了点时间。问题是一开始我endnote导入相应的文献的时候,也突然降智了,只修改了endnotes,没有对于word中的选项进行修改。白白浪费了大把的时间。
移动应用开发实验
先欠着,真的速度慢,感觉写不完作业了。
科研找导师一叙
鬼知道,突然说了一堆的作业ddl,我连文献都没看。找个damn的老师啊!
退役acmer的每日一题
题目链接:https://atcoder.jp/contests/abc365/tasks/abc365_e
题目思路:首先,想到位运算的独立性,我们按位来进行求解,给出一连串10,然后求所有长度至少为2的子串的异或和。首先如果以第i个结尾的子串集合有cnt[i][0]个零,有cnt[i][1]个1,那么在此基础上,对于第i+1个结尾的子串,如果是0,那么cnt[i+1][1]=cnt[i][1],cnt[i+1][0]=cnt[i][0]+1,如果是1,那么cnt[i+1][1]=cnt[i][0]+1,cnt[i+1][0]=cnt[i][1]。同时,我们注意,在计算答案是,我们不能使用当前的,因为当前的包括了以当前字符为串,即长度为1的子串。所以每次都是使用前者的。
我这个方法,是通过一个递推的形式得出来的。而对于数学好的同学,可以看看这么这个大哥的题解。
这位大哥的数学推导感觉很不错:https://www.cnblogs.com/snapyust/p/18341238
代码实现:
#include<bits/stdc++.h>
#define int long long
#define endl '\n'
#define ios ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)
using namespace std;
const int N=2e5+10;
const int MAX=1e6+5;
const int mod=1E9+7;
int n,m,k,w;
void solve(){
int ans=0;
cin>>n;
vector<int>a(n+1,0);
vector<vector<int>>cnt(n+1,vector<int>(2,0));
for(int i=1;i<=n;i++)cin>>a[i];
for(int j=0;j<=30;j++){
cnt[0][0]=cnt[1][0]=0;
int t=1<<j;
for(int i=1;i<=n;i++){
cnt[i][0]=cnt[i-1][0];
cnt[i][1]=cnt[i-1][1];
if((a[i]>>j)&1){
swap(cnt[i][0],cnt[i][1]);
cnt[i][1]++;
ans+=cnt[i-1][0]*t;
}
else {
cnt[i][0]++;
ans+=cnt[i-1][1]*t;
}
}
}
cout<<ans<<endl;
}
signed main(){
ios;
int t;
t=1;
//cin>>t;
while (t--){
solve();
}
return 0;
}