日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

第10周总结

發布時間:2024/1/17 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第10周总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

總結:三天集訓,前兩天就做出了2個題(好像是最多兩個來著),第三天4個,還有一個超時,木有找到規律。

A類:http://codeforces.com/gym/101955/problem/G

參考博客:https://www.cnblogs.com/hua-dong/p/10363254.html

題意:在二維平面上四種操作: 1,加一個帶權的點; 2,刪去一個點; 3,給一個點周圍歐幾里得距離為sqrt(k)的存在的點點權都加w; 4,查詢一個到點歐幾里得距離為sqrtk的點權和。

思路:開始看到題的第一反應是線段樹區間問題,然后發現是求符合的點的個數,就不會做了。

題解是暴力模擬(由于所求的點不會太多),在維護整個圖的狀態的時候,用的是map,用struct會超時。

代碼:

#include<cstdio> #include<iostream> #include<vector> #include<map> using namespace std; #define pii pair<int,int> #define mp make_pair typedef long long ll; /* 無需寫出型別, 就可以生成一個pair對象 std::make_pair(42, '@'); 兩者相等 std::pair<int, char>(42, '@') */ const int maxm=10000000; const int maxn=6010; ll a[maxn][maxn]; int vis[maxn][maxn]; vector<pii>vv[maxm+10]; int n,m,x,y,k,w,ca; void bb(int x,int y,int w){if(x<0||x>6000||y<0||y>6000) return;if(vis[x][y]=ca) a[x][y]+=w; } void add(int x,int y,int w){if(vis[x][y]!=ca) a[x][y]=0,vis[x][y]=ca;a[x][y]+=w; } void add2(int x,int y,int k,int w){for(int i=0;i<vv[k].size();i++){int dx=vv[k][i].first,dy=vv[k][i].second;bb(x+dx,y+dy,w);if(dx!=0) bb(x-dx,y+dy,w);if(dy!=0) bb(x+dx,y-dy,w);if(dx!=0&&dy!=0) bb(x-dx,y-dy,w);} } void del(int x,int y){vis[x][y]=0;a[x][y]=0; } int query(int x,int y){if(x<0||x>6000||y<0||y>6000) return 0;if(vis[x][y]=ca) return a[x][y];return 0; } ll queryy(int x,int y,int k){ll res=0;for(int i=0;i<vv[k].size();i++){int dx=vv[k][i].first,dy=vv[k][i].second;res+=query(x+dx,y+dy);if(dx!=0) res+=query(x-dx,y+dy);if(dy!=0) res+=query(x+dx,y-dy);if(dx!=0&&dy!=0) res+=query(x-dx,y-dy);}return res; } int main(){int t;for(int i=1;i<=3300;i++){for(int j=1;j<=3300;j++){if(i*i+j*j>maxm) break;vv[i*i+j*j].push_back(mp(i,j));}}cin>>t;while(t--){ll ans=0;ca++;cin>>n>>m;printf("Case #d:\n",ca);for(int i=0;i<n;i++){cin>>x>>y>>w;add(x,y,w);}for(int i=0;i<m;i++){int a;cin>>a>>x>>y;x=(x+ans)%6000+1;y=(y+ans)%6000+1;if(a==1){cin>>w;add(x,y,w);}else if(a==2){del(x,y);}else if(a==3){cin>>k>>w;add2(x,y,k,w);}else{cin>>k;ans=queryy(x,y,k);printf("%lld\n",ans);}}}return 0; }

?

B類:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3785

題意:輸入N,求 11 + 22 + 33 + ... + NN days?

思路:打表求循環(294個,真多) 規律參考博客:https://www.cnblogs.com/Simon-X/p/5110328.html

代碼:

#include<cstdio> #include<iostream> using namespace std; int day[294] = {0, 1, 5, 4, 1, 4, 5, 5, 6, 0, 4, 6, 0, 6, 6, 0, 2, 0, 1, 6,0, 0, 1, 5, 6, 3, 0, 6, 6, 0, 1, 4, 6, 5, 6, 6, 0, 2, 4, 5,0, 6, 6, 0, 4, 3, 0, 3, 4, 4, 5, 6, 3, 5, 6, 5, 5, 6, 1, 6,0, 5, 6, 6, 0, 4, 5, 2, 6, 5, 5, 6, 0, 3, 5, 4, 5, 5, 6, 1,3, 4, 6, 5, 5, 6, 3, 2, 6, 2, 3, 3, 4, 5, 2, 4, 5, 4, 4, 5,0, 5, 6, 4, 5, 5, 6, 3, 4, 1, 5, 4, 4, 5, 6, 2, 4, 3, 4, 4,5, 0, 2, 3, 5, 4, 4, 5, 2, 1, 5, 1, 2, 2, 3, 4, 1, 3, 4, 3,3, 4, 6, 4, 5, 3, 4, 4, 5, 2, 3, 0, 4, 3, 3, 4, 5, 1, 3, 2,3, 3, 4, 6, 1, 2, 4, 3, 3, 4, 1, 0, 4, 0, 1, 1, 2, 3, 0, 2,3, 2, 2, 3, 5, 3, 4, 2, 3, 3, 4, 1, 2, 6, 3, 2, 2, 3, 4, 0,2, 1, 2, 2, 3, 5, 0, 1, 3, 2, 2, 3, 0, 6, 3, 6, 0, 0, 1, 2,6, 1, 2, 1, 1, 2, 4, 2, 3, 1, 2, 2, 3, 0, 1, 5, 2, 1, 1, 2,3, 6, 1, 0, 1, 1, 2, 4, 6, 0, 2, 1, 1, 2, 6, 5, 2, 5, 6, 6,0, 1, 5, 0, 1, 0, 0, 1, 3, 1, 2, 0, 1, 1, 2, 6, 0, 4, 1, 0,0, 1, 2, 5, 0, 6, 0, 0, 1, 3, 5, 6, 1, 0 }; string s[7]= {"Saturday", "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday"}; int main(){int t, a;scanf("%d", &t);while (t--){scanf("%d", &a);printf("%s\n",s[day[a % 294]].c_str());//cout會超時。}return 0; }

?

轉載于:https://www.cnblogs.com/zhyyyy/p/10815755.html

總結

以上是生活随笔為你收集整理的第10周总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。