2016 ICPC 北京网络赛 A 恶心模拟 F 循环矩阵,FFT(待补) I 模拟
2016 ICPC 北京網絡賽?????
A - The Book List
題意:每本書有所屬種類,給出原生的存放方式,求按新的方式存放的樣子。
tags:坑到心態爆炸的題==? 直接堆進vector里搞的,不知道哪錯了,待補 。 ?? 真的好題,好題....??? 可參考 知乎討論
坑點: 字典序, 空格, 書名可與種類名相同, 種類名要在書名前, '0'結束符, 種類名可以是'0', 書沒有種類。
#include<iostream> #include<cstdio> #include<cstdlib> #include<algorithm> #include<cstring> #include<string> #include<cmath> #include<queue> #include<stack> #include<map> #include<bitset> #include<vector> #include<set> #include<list> using namespace std; #pragma comment(linker, "/STACK:102400000,102400000") #define rep(i,a,b) for (int i=a;i<=b;i++) #define per(i,b,a) for (int i=b;i>=a;i--) #define mes(a,b) memset(a,b,sizeof(a)) #define INF 0x3f3f3f3f #define PB push_back typedef long long ll; const int N = 200005;vector<string > ve[100]; string s1, s; char ch; int k=0, cas=1; void solve() {printf("Case %d:\n", cas++);sort(ve, ve+k);int sum=0;for(int j=0, sz=ve[0].size(); j<sz; j++) {rep(h,1,sum) putchar(' ');for(int h=1; ve[0][j][h]; h++) putchar(ve[0][j][h]); puts("");sum+= 4;}rep(i,1,k-1) if(ve[i]!=ve[i-1]) {bool flag=0; sum=0;for(int j=0, sz=ve[i].size(); j<sz; j++) {if(j<ve[i-1].size() && ve[i][j]!=ve[i-1][j]) flag=1;if(flag==1) {rep(h,1,sum) putchar(' '); for(int h=1; ve[i][j][h]; h++) putchar(ve[i][j][h]); puts("");}sum+= 4;}}k=0;rep(i,0,39) ve[i].clear(); } int main() {s="";while(scanf("%c", &ch)!=EOF) {if(ch=='\n') {if(s.size()==1 && s=="0") { solve(); s=""; continue; }bool flag=0;for(int j=s.size()-1; j>=0; j--) if(s[j]=='/') {if(flag==0) s[j]=']', flag=1;else s[j]='[';}s1="["; if(flag==0) s1="]";for(int j=0; s[j]; j++) {if(s[j]=='[' || s[j]==']') { ve[k].PB(s1); s1=""; }s1+=s[j];}ve[k].PB(s1);s="";k++;} else {s+=ch;}}return 0; } /* A1/B1 DF/B2/0B6/C5 A1/B1 DF/B2/B5/CC A1/B1/B2/B1 0 A1 AAAA 0 a/b/c a/b 0 c/b/v c/v 0*/ 錯誤?
C - A Simple Job ? ? 水題,求出現次數最多的詞組。
#include<iostream> #include<cstdio> #include<cstdlib> #include<algorithm> #include<cstring> #include<string> #include<cmath> #include<queue> #include<stack> #include<map> #include<bitset> #include<vector> #include<set> #include<list> using namespace std; #pragma comment(linker, "/STACK:102400000,102400000") #define rep(i,a,b) for (int i=a;i<=b;i++) #define per(i,b,a) for (int i=b;i>=a;i--) #define mes(a,b) memset(a,b,sizeof(a)) #define INF 0x3f3f3f3f #define MP make_pair #define fi first #define se second typedef long long ll; const int N = 200005;map<pair<string ,string >, int > mp; void solve() {int mx=0; string s1, s2;for(auto it=mp.begin(); it!=mp.end(); it++) {if(mx<(it->se)) mx=it->se, s1=it->fi.fi, s2=it->fi.se;}cout<<s1<<" "<<s2<<":"<<mx<<endl; } int main() {char ch; string s1="", s2="";mp.clear();bool flag=0;while(scanf("%c", &ch)!=EOF) {if(ch=='#' && flag==0) {solve();s1="", s2="";mp.clear();flag=1;}else if(ch==',' || ch=='.' || ch=='\n') {if(s2!="" && s1!="") mp[MP(s2,s1)]++;s1="", s2=""; flag=0;}else if(ch==' ' && s1!="") {if(s2!="") mp[MP(s2,s1)]++;s2=s1, s1="";}else if(ch<='z' && ch>='a') s1+=ch;}return 0; } View CodeF - Periodic Signal
題意:給出A[],B[]數組,求
tags:化簡一下,就是求 max(A[i]*B[(i+k)%n], i=0~n-1) ,k=0~n-1。? 然后就不知道了。。要用到FFT,試著學了一下,完全看不懂。
I - Countries
題意:兩國打戰。A國發射N枚導彈,第 i 枚在Tai時向B國發射,中途飛行時間Taci,破壞范圍dai;國家B發射M枚,其它相同。 A國防護系統持續時間Ta,B國持續時間Tb,且B在時間 x打開系統。問A在什么時間開啟防護,可使A國遭受破壞范圍最小。
tags:看著很復雜,其實就是xjb模擬,但要理清頭緒。
#include<iostream> #include<cstdio> #include<cstdlib> #include<algorithm> #include<cstring> #include<string> #include<cmath> #include<queue> #include<stack> #include<map> #include<bitset> #include<vector> #include<set> #include<list> using namespace std; #pragma comment(linker, "/STACK:102400000,102400000") #define rep(i,a,b) for (int i=a;i<=b;i++) #define per(i,b,a) for (int i=b;i>=a;i--) #define mes(a,b) memset(a,b,sizeof(a)) #define INF 0x3f3f3f3f typedef long long ll; const int N = 20005;ll ta, tb, xb, yb, ti, tci, dai, sum; int n, m; map<ll , ll > mp; void check(ll t1, ll t2, ll da) {ll s1, s2;if(yb<t1+t2 || t1+t2<xb) s1=t1-ta, s2=t1;else {s2=t1+t2+ ((yb-(t1+t2))/(2*t2))*(2*t2)+t2;s1=s2-ta, s2=t1;if(s1>t1) return ;}s1=max(0LL, s1);mp[s1]+=da, mp[s2+1]-=da; } void Init() { sum=0, yb=xb+tb; mp.clear(); } int main() {while(scanf("%lld %lld %lld %d %d", &ta, &tb, &xb, &n, &m)!=EOF){Init();rep(i,1,n) {scanf("%lld %lld %lld", &ti, &tci, &dai);if(ti+tci>=xb && ti+tci<=xb+tb) {sum+= dai;check(ti+2*tci, tci, dai);}}rep(i,1,m) {scanf("%lld %lld %lld", &ti, &tci, &dai);sum+= dai;check(ti+tci, tci, dai);}ll ans=1e18, sum1=0;for(auto it=mp.begin(); it!=mp.end(); it++) {sum1+= it->second;ans=min(ans, sum-sum1);}printf("%lld\n", ans);}return 0; } View Code?
轉載于:https://www.cnblogs.com/sbfhy/p/6664184.html
總結
以上是生活随笔為你收集整理的2016 ICPC 北京网络赛 A 恶心模拟 F 循环矩阵,FFT(待补) I 模拟的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UIBarbuttonItem
- 下一篇: 如何在VS和CB中配置MySQL环境