2017.10.21 C组比赛总结
2017-10-25 20:38
211 查看
今天考的不太好,只拿了100+0+0+30=130分。。。
其实就是大水一道!
思路:二分查找
每次输入后,输出该时刻所在的区间的编号就好了。
总体难度:★★☆☆☆
设f[i,j]为前i个平台用j钱的最大价值。
然后一边输入一遍DP就好了。
具体过程请看下面的代码~~
总体难度:★★★★☆
拓扑排序后,对于每条双向边,排序后位置靠前的先输出即可。
拓扑排序可以用BFS实现(不用管双向边)。
每连通到一个以前没到过的点,都把它存进队列里,并把它连到的所有边擦掉(所连接的点入度-1),再把这个点从图上永远擦去!
总体难度:★★★☆☆
思路:Floyd(DP)
用一个数组表示边值,一个数组表示点值,然后每次都把两个数组的值加起来判断就可以了。
只用做4次Floyd就可以了(卡常数,嘿嘿嘿嘿)
总体难度:★★☆☆☆
总结:这次比赛的质量还是挺高的。
终于不是那种简单到用暴力水法就可以AK的题目了(然而我还是A了)
我还是要学一下怎样做难题吧!
Σ(`д′*ノ)ノ
【GDKOI训练】音乐节拍
考场AC了!其实就是大水一道!
思路:二分查找
每次输入后,输出该时刻所在的区间的编号就好了。
总体难度:★★☆☆☆
【GDKOI训练】电视游戏问题
思路:捆绑背包设f[i,j]为前i个平台用j钱的最大价值。
然后一边输入一遍DP就好了。
具体过程请看下面的代码~~
总体难度:★★★★☆
【GDKOI训练】头晕的奶牛
思路:拓扑排序 ←(不懂的戳这里)拓扑排序后,对于每条双向边,排序后位置靠前的先输出即可。
拓扑排序可以用BFS实现(不用管双向边)。
每连通到一个以前没到过的点,都把它存进队列里,并把它连到的所有边擦掉(所连接的点入度-1),再把这个点从图上永远擦去!
总体难度:★★★☆☆
【GDKOI训练】过路费
变形的最短路算法。思路:Floyd(DP)
用一个数组表示边值,一个数组表示点值,然后每次都把两个数组的值加起来判断就可以了。
只用做4次Floyd就可以了(卡常数,嘿嘿嘿嘿)
总体难度:★★☆☆☆
总结:这次比赛的质量还是挺高的。
终于不是那种简单到用暴力水法就可以AK的题目了(然而我还是A了)
我还是要学一下怎样做难题吧!
Σ(`д′*ノ)ノ
代码
音乐节拍
#include<cstdio> using namespace std; struct notes { int start,end; }a[50010]; int main() { freopen("mnotes.in","r",stdin); freopen("mnotes.out","w",stdout); int l,r,n,k,i,j,mid,next=0,b; scanf("%d%d",&n,&k); for(i=1;i<=n;i++) { scanf("%d",&b); a[i].start=next,a[i].end=next+b-1; next=next+b; } for(i=1;i<=k;i++) { scanf("%d",&b); l=1,r=n; while(l<=r) { mid=(l+r)/2; if(a[mid].start<=b&&a[mid].end>=b) break; if(a[mid].start>b) r=mid-1; else if(a[mid].end<b) l=mid+1; } printf("%d\n",mid); } return 0; }
电视游戏问题
#include<cstdio> #include<cstring> using namespace std; __attribute__((optimize("-O2"))) //代码加速!!! int n,m,f[51][100001]; __attribute__((optimize("-O2"))) int max(int x,int y) { if(x>y) return x; else return y; } __attribute__((optimize("-O2"))) int main() { freopen("vidgame.in","r",stdin); freopen("vidgame.out","w",stdout); int i,j,k,t,ans=0,x,y,use,num,money,milk; scanf("%d%d",&n,&m); for(i=1;i<=n;i++) { scanf("%d%d",&use,&num); for(j=use;j<=m;j++) f[i][j]=f[i-1][j-use]; for(j=1;j<=num;j++) { scanf("%d%d",&money,&milk); for(k=m;k>=use+money;k--) { f[i][k]=max(f[i][k],f[i][k-money]+milk); } } for(j=0;j<=m;j++) f[i][j]=max(f[i-1][j],f[i][j]); } for(i=1;i<=m;i++) if(f [i]>ans) ans=f [i]; printf("%d\n",ans); return 0; }
头晕的奶牛
#include<cstdio> using namespace std; int a[100010],lian[100010][110],b[100010],date[100010]; __attribute__((optimize("-O2"))) int main() { freopen("dizzy.in","r",stdin); freopen("dizzy.out","w",stdout); int n,m1,m2,i,j,k,x,y,head=0,tail=0; scanf("%d%d%d",&n,&m1,&m2); for(i=1;i<=m1;i++) { scanf("%d%d",&x,&y); lian[x][++lian[x][0]]=y; a[y]++; } for(i=1;i<=n;i++) { if(!a[i]) { tail++; date[tail]=i; b[i]=tail; } } while(head<tail) { head++; k=date[head]; for(i=1;i<=lian[k][0];i++) { j=lian[k][i]; a[j]--; if(!a[j]) { tail++; date[tail]=j; b[date[tail]]=tail; } } } for(i=1;i<=m2;i++) { scanf("%d%d",&x,&y); if(b[x]>b[y]) printf("%d %d\n",y,x); if(b[x]<b[y]) printf("%d %d\n",x,y); } return 0; }
过路费
#include<cstdio> using namespace std; int a[100010],lian[100010][110],b[100010],date[100010]; __attribute__((optimize("-O2"))) int main() { freopen("dizzy.in","r",stdin); freopen("dizzy.out","w",stdout); int n,m1,m2,i,j,k,x,y,head=0,tail=0; scanf("%d%d%d",&n,&m1,&m2); for(i=1;i<=m1;i++) { scanf("%d%d",&x,&y); lian[x][++lian[x][0]]=y; a[y]++; } for(i=1;i<=n;i++) { if(!a[i]) { tail++; date[tail]=i; b[i]=tail; } } while(head<tail) { head++; k=date[head]; for(i=1;i<=lian[k][0];i++) { j=lian[k][i]; a[j]--; if(!a[j]) { tail++; date[tail]=j; b[date[tail]]=tail; } } } for(i=1;i<=m2;i++) { scanf("%d%d",&x,&y); if(b[x]>b[y]) printf("%d %d\n",y,x); if(b[x]<b[y]) printf("%d %d\n",x,y); } return 0; }
相关文章推荐
- 阿里天池中间比赛总结,即消息队列引擎设计
- 20170702练习赛比赛总结
- 8_19 比赛总结 [暑假集训]
- 院内小比赛总结
- 20170711训练赛比赛总结
- 2016.10.4初中部下午NOIP普及组比赛总结
- 第九届蓝桥杯比赛总结
- 2015年1、2、3月刷题、比赛的总结与反思
- 比赛总结(轻工业学院校赛)
- SRM 562 比赛总结
- 2016.7.21纪中比赛总结
- 比赛经验总结--187
- Tri_integral Winter Training 0 比赛总结
- 8-17比赛总结
- 比赛12 总结
- 2013-5月ACM比赛的总结
- 多校联合比赛总结(四)
- 天池工业AI大赛-智能制造质量预测 比赛历程和技术方案总结复赛48名
- 阿里大数据比赛总结
- 阿里大数据比赛总结