比赛前一天晚上凌晨一点被什么声音吵醒,以为是飞蛾,结果打开灯一看,露露的蚊帐垮了,然后角落处有一只螳螂,差点就吓哭了。
那之后我特别想买一个金钟罩,把全身套住,这样就再也不怕小动物来袭了。
赶了半个小时终于赶跑了,又睡不着,就索性破罐子破摔玩起了狼人杀,玩到凌晨5点,差点被我的狼队友气哭了,一摔手机就睡,三个小时之后就又起来集训了。
昨天我神志不清的,特别是做这道F题,先是判断条件写错,wa了几发,然后又两重循环超时,当时榜上面好像只有我们没过,前面的队后面的队都过了,这使我想起了蔡队的一句名言:“人尽皆知傻逼题”
在wa了11发之后!我们终于过了!我罚时我快乐!!!
不用队列,不用设两倍的数组,判断总和比较就行了。
#include <iostream> #include<stdio.h> #include<string.h> #include<math.h> #include<algorithm> #include<queue> #include<map> using namespace std; map<int,int>vis; int main() { int n,m,a[100001]={0},j,temp=0,i,k,pre[100001]={0}; cin>>n; int sum=0; for(i=1;i<=n;i++) { cin>>a[i]; pre[i]=a[i]+pre[i-1]; vis[pre[i]]++; sum+=a[i]; } if(sum%3!=0) cout<<0<<endl; else { int ans=sum/3; int count=0,temp=0,cnt=0; for(i=1;i<=n;i++) { if(vis[ans+pre[i]]&&vis[ans*2+pre[i]]) cnt++; } cout<<cnt<<endl; } return 0; }
下一道是G,这一道是Pzr过的,先以1所在行交换列,再以1所在列交换行。
#include <cstdio> #include <iostream> #include <algorithm> using namespace std; int main() { int num[305][305]; int n,m; int a=0,b=0; int sum=0; cin>>n>>m; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ cin>>num[i][j]; if(num[i][j]==1){ a=i; b=j; } } } for(int i=1;i<=m;i++){ if(num[a][i]!=i){ int flag=0; for(int j=i+1;j<=m;j++){ if(num[a][j]==i){ if(i==1) b=j; sum++; flag=1; for(int t=1;t<=n;t++){ swap(num[t][j],num[t][i]); } } } if(flag==0){ cout<<'*'<<endl; return 0; } } } for(int i=1;i<=n;i++){ if(num[i][b]!=(i-1)*m+b){ int flag=0; for(int j=i+1;j<=n;j++){ if(num[j][b]==(i-1)*m+b){ sum++; flag=1; for(int t=1;t<=m;t++){ swap(num[j][t],num[i][t]); } } } if(flag==0){ cout<<'*'<<endl; return 0; } } } for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ if(num[i][j]!=((i-1)*m+j)){ cout<<'*'<<endl; return 0; } } } cout<<sum<<endl; return 0; }
然后是C,画了很久的图最后终于开窍了,最关键的一个地方就是两个数组f和g,用F保存原始位置,记录现有位置,用G记录之前变换的序号,然后dfs遍历雇主就行了。
#include<stdio.h> #include<iostream> #include<string.h> #include<math.h> #include<algorithm> #include<vector> const int maxn=99999999; using namespace std; int a[505],f[505],g[505],vis[505],ans; vector<int>v[505]; void dfs(int p) { vis[p]=1; for(int i=0; i<v[p].size(); i++) { int k=v[p][i]; if(!vis[k]) { ans=min(ans,a[f[k]]); dfs(k); } } } int main() { int n,m,q,i,x,y,w,z,p; char c; cin>>n>>m>>q; for(i=1; i<=n; i++) cin>>a[i]; for(i=0; i<m; i++) { cin>>x>>y; v[y].push_back(x); } for(i=1; i<=n; i++) { f[i]=i; g[i]=i; } for(i=0; i<q; i++) { cin>>c; if(c=='T') { cin>>w>>z; swap(f[g[w]],f[g[z]]); swap(g[w],g[z]); } else { cin>>p; p=g[p]; memset(vis,0,sizeof(vis)); ans=maxn; dfs(p); if(ans==maxn) cout<<"*"<<endl; else cout<<ans<<endl; } } return 0; }
今天实验室整座楼都白花花的,到处的墙都在被粉刷,空气里弥漫着甲醛的味道,不禁感叹18级小学妹福利真好。
我也想当个粉刷匠,这样就不用集训了啊哈!~