星期一:
上完早八来机房,再敲遍dij先。 边摸鱼边敲,敲完11点半,先去吃个饭。
下午看了点prim算法和kk算法.
晚上又看了遍O(n²)的朴素dij算法,和堆优化的O(mlogn)略有不同.
星期二:
和李,强vp了场22年辽宁省赛,不仅进了银尾,而且收获颇丰。士气大涨,心情很好啊!
从头记录下做题顺序:
A题:
题意:如题
思路:签到,强写的
M:
题意:如题
思路:easy构造,无需多言,放个代码。
#include <bits/stdc++.h>
using namespace std;
using ll=long long;
using PII=pair<int,int>;
const int N=1e6+10;
int n,m;
bool a[1010][1010];
void solve(){
cin >> n;
memset(a,1,sizeof a);
int k;
if(n&1) k=0;
else k=1;
for(int i=k;i<=n;i+=2) a[i][i]=0;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cout << a[i][j];
}
cout << endl;
}
}
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int _=1;
cin >> _;
while(_--) solve();
return 0;
}
//make it count
//开ll plz
E题:
题意:如题
思路:究极签到被卡了老久,还wa了好多发,罚时被扣完了。wa就wa在一行的输入没有处理完就break了,导致输入的处理错乱了,也算吃一堑长一智,这种连续多组输入的,每个都得处理完。
B题:
题意:如题,n和m范围1e3以内
思路:大模拟,最开始强来写这道题,整了250行的代码,wa了两发,然后我们发现还是不能让强写模拟。
代码如下:
#include <bits/stdc++.h>
using namespace std;
using ll=long long;
using PII=pair<int,int>;
const int N=2e5+10,M=1e5+10;
const int mod=998244353;
int n,m;
char c[1010][1010];
int a[1010][1010];
int ans1,ans2;
void check1(int x,int y,int num){
if(x>n-4) return ;
for(int i=x;i<x+5;i++){
if(a[i][y]!=num) return ;
}
if(num&1) ans1++;
else ans2++;
}
void check2(int x,int y,int num){
if(y>m-4) return ;
for(int j=y;j<y+5;j++){
if(a[x][j]!=num) return ;
}
if(num&1) ans1++;
else ans2++;
}
void check3(int x,int y,int num){
if(x>n-4 || y>m-4) return ;
for(int i=x,j=y;i<x+5;i++,j++){
if(a[i][j]!=num) return ;
}
if(num&1) ans1++;
else ans2++;
}
void check4(int x,int y,int num){
if(x<5 || y>m-4) return ;
for(int i=x,j=y;j<y+5;i--,j++){
if(a[i][j]!=num) return ;
}
if(num&1) ans1++;
else ans2++;
}
void solve(){
cin >> n >> m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin >> c[i][j];
if(c[i][j]=='0') a[i][j]=0;
if(c[i][j]=='1') a[i][j]=1;
if(c[i][j]=='2') a[i][j]=2;
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
check1(i,j,1);
check2(i,j,1);
check3(i,j,1);
check4(i,j,1);
check1(i,j,2);
check2(i,j,2);
check3(i,j,2);
check4(i,j,2);
}
}
cout << ans1 << " " << ans2;
}
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int _=1;
// cin >> _;
while(_--) solve();
return 0;
}
//make it count
//开ll plz
I题:
题意:如题
思路:我读完后没有思路,倒是后来强读后很快反应出来这是kk算法逆运用,刚好刚学kk算法,算是拿道板子题练练手了
代码如下:
#include <bits/stdc++.h>
using namespace std;
using ll=long long;
using PII=pair<int,int>;
const int N=1e6+10,M=1e9+10;
struct nod{
int u,v,w;
}eg[N];
int n,m;
int fa[N];
bool cmp1(nod a,nod b){
return a.w>b.w;
}
int fnd(int x){
return fa[x]==x?x:fa[x]=fnd(fa[x]);
}
void solve(){
cin >> n >> m;
for(int i=1;i<=n;i++) fa[i]=i;
for(int i=1;i<=m;i++){
cin >> eg[i].u >> eg[i].v >> eg[i].w;
}
sort(eg+1,eg+n+1,cmp1);
int cnt=0;
for(int i=1;i<=m;i++){
int x=eg[i].u,y=eg[i].v;
x=fnd(x),y=fnd(y);
if(x!=y){
fa[x]=y;
cnt++;
if(cnt==n-1){cout << eg[i].w; return ;}
}
}
}
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int _=1;
// cin >> _;
while(_--) solve();
return 0;
}
//make it count
//开ll plz
F题:
题意:如题
思路:刚开始试图找规律,强打了个表后发现,其实范围内与n互质的数特别好找,用for一路搜上去也就循环10次以内,所以算是一道暴力题。就不贴代码了。
最后一道,G题:
题意:如题
思路:三人一起想半天无果后,我决定写一发暴力,但强似乎有了思路,于是我俩在两台机子上写自己的,强写了会没实现出来,我第一发暴力也t了,但后来给算最大公约数剪了个枝,就很神奇的过了
先贴暴力代码:
#include <bits/stdc++.h>
using namespace std;
using ll=long long;
using PII=pair<int,int>;
const int N=1e6+10;
int n;
vector<int>ve;
int gcd(int a,int b){
return b==0?a:gcd(b,a%b);
}
void solve(){
cin >> n;
while(n--){
int op,x;cin >> op;
if(op==1){
cin >> x;
ve.push_back(x);
}else if(op==2){
ve.pop_back();
}else if(op==3){
cout << ve[ve.size()-1] << "\n";
}else{
cin >> x;
int gc=0;
for(int i=ve.size()-1,cnt=x;cnt;cnt--,i--){
gc=gcd(ve[i],gc);
if(gc==1) break;//神之一手的剪枝
}
for(int i=ve.size()-1,cnt=x;cnt;cnt--,i--){
ve[i]=gc;
}
}
}
}
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int _=1;
// cin >> _;
while(_--) solve();
return 0;
}
//make it count
//开ll plz
事后强试图寻找正解,好像找到了个线段树的解,等会研究下。
这次比赛不仅进了银牌尾,还收获颇丰,在此总结一下。
1.签到题不能急,三个人都确定了再交,宁愿多花1min让其他人理解好题意,万一wa了一发,20min罚时真的遭不住。
2.大模拟交给我来写。
3.如果想了很久都没什么思路,能暴力就先冲发暴力。
4.虽然强是代码手,但有必要时我也需要上机实现我的想法(如暴力),该果断时就得果断点。
补题感觉没啥好补的,g题线段树做法可以看看,但我现在不打算补.
星期四:
昨天在宿舍写了一晚数据结构项目的中期报告,代码一点没准备好,报告全靠编。
在pta上写了个拓扑排序,感觉纯排序的话确实挺好敲的。
暂时放弃线段树入门,入了星期天省赛大概率也用不出来。
晚上在acwing上看了01背包和完全背包
星期五:
早上来看了多重背包,中午继续看,晚上没干啥,早点回宿舍收拾,走前做了道基础构造
题意:如题
思路:情况判断即可
星期六:
早上和强小vp一把21年辽宁省赛。
记录一道签到题的收获:
int chan(char c){
if(c>='a' && c<='z') return (int)c-('a'-'A');
if(c>='A' && c<='Z') return (int)c-('A'-'a');
// return 0;
}
如你所见,此函数的功能是更改字母大小写,但是如果只有两个if,在牛客上会编译不通过,初步判断为是因为,不能在任何情况下都确定有返回值,所以可以在下面加个 return 0; 。
考了个六级,感觉还可以,但分应该也不会很高。
周日:
省赛直接被拿下了,被“签到”卡了接近两小时才反应过来读错题,封榜后完成签到。
失败总是贯穿人生始终,这就是人生。