思路:強模擬…
思路:暴力分還是挺多的,s=t,w=0,s=1,t=1,list時,滿打滿算還有80分,但功底還是差了點啊,實際上s=1,t=1時,暴力會超時,也就是說必須要用正解了。
仔細理解題意,乙個玩家從a 到 b, 沿途到達點的時間為0,1,2,…,b-a,而每個點的觀察員只在wi時觀察,也就是說,若想要被觀察員觀察到,就必須是
wi+i 或 wi-i,那麼這個就有點像樹上差分了。
#include
#define rep(i,f,t) for(int i=(f),i##_end_=(t);i<=i##_end_;i++)
#define drep(i,f,t) for(int i=(f),i##_end_=(t);i>=i##_end_;i--)
#define ll long long
#define inf 0x3f3f3f3f
#define n 300005
using
namespace
std;
int n,m;
struct nodea[n];
vector
e[n],vis[n];
int w[n],ans[n],sum[n];
int d[n],fa[n],top[n],sz[n],son[n];
struct p1
}p1;
struct p2else
}rep(i,1,n)
rep(j,0,vis2[i].size()-1)
if (i-w[i]>=1) ans[i]+=sum1[i-w[i]];
if (i+w[i]<=n) ans[i]+=sum2[i+w[i]];
}rep(i,1,n-1)printf("%d ",ans[i]);
printf("%d\n",ans[n]);
}}p2;
struct p3
rep(i,0,vis[x].size()-1)sum[a[vis[x][i]].s]++;
if(d[x]-w[x]>0)ans[x]+=sum[d[x]-w[x]];
}void solve()
}p3;
struct p4
for (int i=0;i<(int)vis[x].size();i++)sum[d[a[vis[x][i]].s]]++;
if (d[x]+w[x]<=n)ans[x]+=sum[d[x]+w[x]];
}void solve()
}p4;
struct p5;
vector
q1[n],q2[n];
int sum1[n],sum2[n*2];
void dfs1(int x,int f)
}void dfs2(int x,int tp)
}int lca(int a,int b)
rep(i,0,q1[x].size()-1)
rep(i,0,q2[x].size()-1)
if(d[x]+w[x]<=n)ans[x]+=sum1[d[x]+w[x]];
ans[x]+=sum2[d[x]-w[x]+n];
}void solve());
q1[a[i].lca].push_back((node));
q2[a[i].t].push_back((node));
q2[fa[a[i].lca]].push_back((node));
}dfs(1,0);
rep(i,1,n)printf("%d ",ans[i]);
puts("");
}}p5;
int main()
rep(i,1,n)scanf("%d",&w[i]);
rep(i,1,m)scanf("%d%d",&a[i].s,&a[i].t);
if(n==991 || n==992)p1.solve();// s=t w=0
else
if(n==99994)p2.solve();// list
else
if(n==99995)p3.solve();// s=1
else
if(n==99996)p4.solve();// t=1
else p5.solve(); // ac code
return
0;}
思路:這題的暴力分也不少…,m=0,1,2時,滿打滿算也有68分(不贅述了),而正解顯然是dp,但這裡是期望dp。
#include
#define rep(i,f,t) for(int i=(f),i##_end_=(t);i<=i##_end_;i++)
#define drep(i,f,t) for(int i=(f),i##_end_=(t);i>=i##_end_;i--)
#define ll long long
#define db double
#define n 2005
using namespace std;
int n,m,v,e;
int c[n],d[n];
db inf,p[n],dis[n][n],dp[n][n][2],ans;
void floyd()
struct p2
printf("%.2lf\n",tot);
}}p2;
struct p3
}printf("%.2lf\n",tot);
}}p3;
struct pac
if(dp[i][j][1]!=inf)
}rep(i,0,m)ans=min(ans,min(dp[n][i][0],dp[n][i][1]));
printf("%0.2lf\n",ans);
}}p100;
int main()
floyd();
rep(i,2,n)ans+=dis[c[i-1]][c[i]];
if(!m)printf("%.2lf\n",ans);
else
if(m==1)p2.solve();
else
if(m==2 && n<10)p3.solve();
else p100.solve();
}
小結:去年的暴力分真心是多,100+35+68=203,而其中第2題s=1,t=1稍微想想應該也就有45…看來**的功底還有待提高呀… 2017 7 29 離線賽 總結
本著貪心的思想,我先斜著走到頂,然後直走到終點,顯然這是最優的,但是我忽視了斜著走的最後一步可以和直著走的第一步合併,我錯誤地把兩個過程分開了。假如我當時多找幾組資料來模擬說不定能找到這個錯誤,我也沒敲個暴力來對拍 因為暴力太長了 我得到的教訓是 不能肯定自己演算法的正確性是,不如敲個暴力對拍一下,...
離線賽20171006總結
這次考得還不錯,頗有些遺憾的是因為第一題我離正解已經很近了,可惜考試畢竟是考試,一開始的題目看錯沒看到相鄰的條件浪費了很多時間,到後來就沒有時間去寫正解了。這畢竟也是一種實力,不能說題目看錯失誤問題就不大。上次的考試兩個輸出只能模乙個沒看到導致少了70分。這種失誤還是太低階了,也太致命了。這種題目看...
2017 10 7離線賽總結
失分小結 估分 玄學 實際分數 300 收穫 寫題前仔細分析題目,好好思考 考試過程 第一題真的想不到,只好打個表,結果由於資料半天沒輸出來,心態 有前前後後折騰了半個小時 第二題先是打了個n n暴力,又調了半天,這時考試只剩下兩個小時 第三題思考了大約十分鐘,然後想到了正解,實現比較快,乙個小時就...