2010年度ICPC模擬国内予選
圧倒的敗北感……
というか何だろう。モチベーション下がりまくり。
チームメイトさんは授業以外で3週間全く問題解かないどころかチームwikiすら見ないし。
大体、学習ブログ最後に更新したの4月じゃねえかよ。
何か言ってくれないと僕もどうしたらいいのか判らないんだけど。
お互いに不幸になるためにチーム組んだんじゃないんだけどな。
と、まあどうせここなんか誰も見てないだろうし書く。
さてさて今日の復習。問題解きなおして行こう。
TCOで睡眠不足なんで3問解けるだろうか。。。
↓以下更新予定。
問題文などはめんどいので今日のところは省略。
戦略とか考え出すとイライラする。起きていてもいいことないのでコードだけ貼ってもう寝よう。
あー立ち直れるかなあ。
てんぷれ
#include<iostream> #include<algorithm> using namespace std; #define rep(i,n) for(int i=0;i<n;i++)
A
int sum(int b,int len) { int ret=0; rep(i,len)ret+=b+i; return ret; } int main(){ int n; while(cin>>n,n) { int ans=0; for(int len=2;len<=n;len++) for(int b=1;b<=n;b++) { int s=sum(b,len); if(s==n)ans++; if(s>n)break; } cout<<ans<<endl; } return 0; }
B
struct S{ string name; double ratio; bool operator<(const S &r)const{ if(ratio==r.ratio)return name<r.name; return ratio>r.ratio; } }; int main(){ int n; while(cin>>n,n) { S crop[50]; rep(i,n) { int p,a,b,c,d,e,f,s,m,gain=0,time=0; cin>>crop[i].name>>p>>a>>b>>c>>d>>e>>f>>s>>m; gain=s*m*f-p; time=(a+b+c)+(d+e)*m; crop[i].ratio=double(gain)/time; } sort(crop,crop+n); rep(i,n)cout<<crop[i].name<<endl; cout<<"#"<<endl; } return 0; }
C
#define SQ(n) ((n)*(n)) const int inf=1<<28; int n,m,code[16],in[20000]; int dp[20001][256]; int func(int n) { if(n<0)return 0; return min(255,n); } int main(){ while(cin>>n>>m,n) { rep(i,m)cin>>code[i]; rep(i,n)cin>>in[i]; rep(i,n+1)rep(j,256)dp[i][j]=inf; dp[0][128]=0; for(int i=1;i<=n;i++) rep(j,256)rep(k,m)dp[i][func(j+code[k])]=min( dp[i][func(j+code[k])],dp[i-1][j]+ SQ(func(j+code[k])-in[i-1]) ); cout<<*min_element(dp[n],dp[n]+256)<<endl; } return 0; }
D
int n,m,r,z[1000]; int DL[200][200],DS[200][200]; int dp[1000][200]; int main(){ while(cin>>n>>m,n) { rep(i,n)rep(j,n)DL[i][j]=DS[i][j]=inf; rep(i,m) { int x,y,t; char c; cin>>x>>y>>t>>c; x--,y--; if(c=='L')DL[x][y]=DL[y][x]=min(DL[x][y],t); if(c=='S')DS[x][y]=DS[y][x]=min(DS[x][y],t); } rep(i,n)DL[i][i]=DS[i][i]=0; cin>>r; rep(i,r)cin>>z[i],z[i]--; rep(i,r)rep(j,n)dp[i][j]=inf; rep(k,n)rep(i,n)rep(j,n) { DL[i][j]=min(DL[i][j],DL[i][k]+DL[k][j]); DS[i][j]=min(DS[i][j],DS[i][k]+DS[k][j]); } dp[0][z[0]]=0; priority_queue<pair<int,pi> > Q; Q.push(mp(0,mp(0,z[0]))); while(!Q.empty()) { int cc=Q.top().first; int cur=Q.top().second.first,ship=Q.top().second.second; Q.pop(); if(dp[cur][ship]>-cc)continue; if(cur==r-1) { cout<<-cc<<endl; break; } //land int nc=cc-DL[z[cur]][z[cur+1]]; if(DL[z[cur]][z[cur+1]]!=inf&&dp[cur+1][ship]>-nc) dp[cur+1][ship]=-nc,Q.push(mp(nc,mp(cur+1,ship))); //sea rep(i,n)if(DL[z[cur]][ship]!=inf&&DS[ship][i]!=inf&&DL[i][z[cur+1]]!=inf) { nc=cc-DL[z[cur]][ship]-DS[ship][i]-DL[i][z[cur+1]]; if(dp[cur+1][i]>-nc) dp[cur+1][i]=-nc,Q.push(mp(nc,mp(cur+1,i))); } } } return 0; }