2016广东工业大学新生杯决赛网络同步赛暨全国新生邀请赛
2016-12-05 20:21
561 查看
[align=center]2016广东工业大学新生杯决赛网络同步赛暨全国新生邀请赛[/align]
[align=center]Ploblem A : pigofzhou的巧克力棒[/align]
[align=left]原题链接:http://gdutcode.sinaapp.com/problem.php?cid=1051&pid=0[/align]
但是他妹子之一中的 15zhazhahe 有强迫症。若它每次将一根长为 k 的巧克力棒折成两段长为 a 和 b 的巧克力棒,此时若 a=b,则15zhazhahe会得到一点高兴值。
pigofzhou想知道15zhazhahe最多能获得多少高兴值。
5
[align=left]ps:先上代码,下面和B题一起解释。。[/align]
[align=left]代码:[/align]
[align=center]Problem B: Zhazhahe究竟有多二[/align]
[align=left]原题链接:http://gdutcode.sinaapp.com/problem.php?cid=1051&pid=1[/align]
4000
计算zhazhahe的脑残值有几个2的因子),下面给你一个n,n!表示zhazhahe的脑残值。
2
4
15
3
11
[align=left]代码:[/align]
ps:没错,这两道题我是用一个代码过的,很坑有木有。。。
说一下当时我是怎么写的吧,刚开始我先看的是A题,但是看了半天没太理解是什么意思,而且还没有找对规律。。。好吧,A题放下看B题,乍一看B题,题意好简单,好吧,一写肯定超时。很明显常规思路不行,下面就是找规律了。我是从1写到32,然后开始找,发现了2时候的是1,4时候的是3,8时候的是7,16时候的是15,32时候的是31,很明显,当是2的n次方的时候结果是2的n次方减1,然后就利用这个规律开始编码了,通过while循环来不断地缩小数值,最后直到n<=1,果断A了
然后回过头来看A题,发现结果和B题的完全一样,于是把B题的代码交了上去,A了
[align=center]Problem C: 剁手女生节[/align]
[align=left]原题链接:http://gdutcode.sinaapp.com/problem.php?cid=1051&pid=2[/align]
ming先前就已经收藏了 n 本练习册了,一直不舍得做,这次突然决定把它们都拿出来当作礼物送出去!
但是,ming班上一共有 4 个女生,为了不要显得自己偏爱哪一个,他觉得每个女生都应该分到同等数量的练习册。
这样的话,原来的 n 本就可能不太够了。于是他去逛亚马当商城。
他发现,最近ACM(Association of Counting Method)又出版了好多新版数学练习册:高数、线代、离散、概率论…
而且商店有三种促销优惠套餐:
第一种:任选 1 本练习册,送欧几里德主题套尺。只需 a 个比特币;
第二种:任选 2 本练习册,送莱布尼兹同款2B铅笔。只需 b 个比特币;
第三种:任选 3 本练习册,送爱因思坦专用橡皮擦。只需 c 个比特币。
那么问题来了:吃土ming如何用最少的比特币购买若干本练习册,使得全部(包括原来的n本)可以平分给四个女生?
1 1 3 4
6 2 1 1
4 4 4 4
1
0
[align=left]ps:很简单,只需要最后购买练习册的数量取余4等于4-n%4就好了。[/align]
[align=left]代码:[/align]
Problem D: 勤奋的涟漪2
[align=left]原题链接:http://gdutcode.sinaapp.com/problem.php?cid=1051&pid=3[/align]
7
1 3 3 2 1 2 3
1
1
1
2
1
3
0
0
0
[align=left]ps:除了那个数学表达式,就没什么了,,然而坑的是比赛的时候我竟然没看这道题。。(数学表达式的结果是-24)[/align]
[align=left]代码:[/align]
[align=center]Problem E: 穷游中国在统题[/align]
[align=left]原题链接:http://gdutcode.sinaapp.com/problem.php?cid=1051&pid=4[/align]
首先他把题目划分成很多组,每组的题目都是连续的,例如某一组包含从i到j的题目,那么这一组包含的是第i,i+1,i+2,i+3,...,j题。 这样每道题都属于某一个组,然后他再到组内把题目按照难度值进行从小到大排序。 当每个组内都进行排序之后,最终全部题目的难度值将按照从小到大的顺序排列好。 我们知道每一组里面的题目越多,排序的压力就越大,所以Maple提出一个合理的要求,就是让每个组里面的题目数量尽可能的少,聪明的ACMer,你知道Travel_poorly一共要分出多少个组吗?
5
3 2 5 4 6
5
5 4 3 2 1
1
ps:想了半天没明白题意。。最后看了下别人写的代码才略懂,,引用一下大神的话
[align=left]比如3 2 5 4 6[/align]
[align=left]排序之后是 2 3 4 5 6[/align]
[align=left]那么排序后的2所谓的位置到排序前2所在的位置这一个区间是必须被分在一个区间内的。[/align]
[align=left]所以题目就变成了判断原来位置和排序后位置的区间的问题[/align]
[align=left]显然相交的区间需要合并成一个区间[/align]
[align=left]然后计算区间个数即可[/align]
[align=left]但是注意,当难度值一样的时候,还是按照原来的顺序比较好。[/align]
[align=left]代码:
[/align]
[align=center]
Problem H: 《为什么会变成这样呢》[/align]
[align=left]原题链接:http://gdutcode.sinaapp.com/problem.php?cid=1051&pid=7[/align]
6
2 2 1 1 3 4
4
1 1 3 4
3 4
ps:注意,喜悦感相同的喜悦是重复出现的,所以只要出现一个与前后各不相同的数就说明找到了这两个数,可以用数组模拟,然而我用了万恶的栈,还好还好,差一点就超时。
[align=left]代码:[/align]
Problem I: 只会做水题的jiakin
[align=left]原题链接:http://gdutcode.sinaapp.com/problem.php?cid=1051&pid=8[/align]
ps:估计是后台数据没传好,随便交个代码只要不出编译错误就过了。。。巨坑
[align=left]原谅本人还不太会算法,没能写出来,,不过有详细解释,请看大神代码:http://blog.csdn.net/jnxxhzz/article/details/53455518[/align]
[align=left]
[/align]
ps:其他题比较水,做一下水水就好,就不贴上来了
。
[align=center]Ploblem A : pigofzhou的巧克力棒[/align]
[align=left]原题链接:http://gdutcode.sinaapp.com/problem.php?cid=1051&pid=0[/align]
Description
众所周知,pigofzhou有许多妹子。有一天,pigofzhou得到了一根巧克力棒,他想把这根巧克力棒分给他的妹子们。具体地,这根巧克力棒长为 n,他想将这根巧克力棒折成 n 段长为 1 的巧克力棒,然后分给妹子们。但是他妹子之一中的 15zhazhahe 有强迫症。若它每次将一根长为 k 的巧克力棒折成两段长为 a 和 b 的巧克力棒,此时若 a=b,则15zhazhahe会得到一点高兴值。
pigofzhou想知道15zhazhahe最多能获得多少高兴值。
Input
输入数据为T组(T <= 10000),每组数据读入一个n(n<=1000000000)Output
一行一个整数代表能获得的最大高兴值Sample Input
15
Sample Output
[align=left]3[/align][align=left]ps:先上代码,下面和B题一起解释。。[/align]
[align=left]代码:[/align]
#include<stdio.h> #define ll long long int int main() { ll t; scanf("%lld",&t); while(t--) { ll n,x=1,s=0; scanf("%lld",&n); while(n>1) { x=1; while(x<=n) { x<<=1; } x>>=1; s+=(x-1); n-=x; } printf("%lld\n",s); } }
[align=center]Problem B: Zhazhahe究竟有多二[/align]
[align=left]原题链接:http://gdutcode.sinaapp.com/problem.php?cid=1051&pid=1[/align]
Description
Zhazhahe竟然能二到把耳机扔到洗衣机里去洗,真的是二到了一种程度,现在我们需要判断一下zhazhahe二的程度(就是4000
计算zhazhahe的脑残值有几个2的因子),下面给你一个n,n!表示zhazhahe的脑残值。
Input
输入一个正整数t(0<t<3000)表示样例组数,每组样例输入一个正整数n(0<n<1e18),n!表示zhazhahe的脑残值Output
输出一个正整数表示zhazhahe二的程度Sample Input
32
4
15
Sample Output
13
11
[align=left]代码:[/align]
#include<stdio.h> #define ll long long int int main() { ll t; scanf("%lld",&t); while(t--) { ll n,x=1,s=0; scanf("%lld",&n); while(n>1) { x=1; while(x<=n) { x<<=1; } x>>=1; s+=(x-1); n-=x; } printf("%lld\n",s); } }
ps:没错,这两道题我是用一个代码过的,很坑有木有。。。
说一下当时我是怎么写的吧,刚开始我先看的是A题,但是看了半天没太理解是什么意思,而且还没有找对规律。。。好吧,A题放下看B题,乍一看B题,题意好简单,好吧,一写肯定超时。很明显常规思路不行,下面就是找规律了。我是从1写到32,然后开始找,发现了2时候的是1,4时候的是3,8时候的是7,16时候的是15,32时候的是31,很明显,当是2的n次方的时候结果是2的n次方减1,然后就利用这个规律开始编码了,通过while循环来不断地缩小数值,最后直到n<=1,果断A了
然后回过头来看A题,发现结果和B题的完全一样,于是把B题的代码交了上去,A了
[align=center]Problem C: 剁手女生节[/align]
[align=left]原题链接:http://gdutcode.sinaapp.com/problem.php?cid=1051&pid=2[/align]
Description
由于女生节准备到了,ming打算给班上女生送一份大礼。没错,就是数学练习册!ming先前就已经收藏了 n 本练习册了,一直不舍得做,这次突然决定把它们都拿出来当作礼物送出去!
但是,ming班上一共有 4 个女生,为了不要显得自己偏爱哪一个,他觉得每个女生都应该分到同等数量的练习册。
这样的话,原来的 n 本就可能不太够了。于是他去逛亚马当商城。
他发现,最近ACM(Association of Counting Method)又出版了好多新版数学练习册:高数、线代、离散、概率论…
而且商店有三种促销优惠套餐:
第一种:任选 1 本练习册,送欧几里德主题套尺。只需 a 个比特币;
第二种:任选 2 本练习册,送莱布尼兹同款2B铅笔。只需 b 个比特币;
第三种:任选 3 本练习册,送爱因思坦专用橡皮擦。只需 c 个比特币。
那么问题来了:吃土ming如何用最少的比特币购买若干本练习册,使得全部(包括原来的n本)可以平分给四个女生?
Input
每组输入是一行四个整数:n,a,b,c(1 <= n,a,b,c <= 1e9)意思如题目描述。Output
对每组输入,输出一行一个整数,表示ming要花的最少的比特币数。Sample Input
31 1 3 4
6 2 1 1
4 4 4 4
Sample Output
31
0
[align=left]ps:很简单,只需要最后购买练习册的数量取余4等于4-n%4就好了。[/align]
[align=left]代码:[/align]
#include<stdio.h> #include<algorithm> using namespace std; int main() { int t; scanf("%d",&t); while(t--) { long long int n,a,b,c; scanf("%lld%lld%lld%lld",&n,&a,&b,&c); long long int s=4-n%4; if(s==4) printf("0\n"); else { long long int k; if(s==3) k=min(min(a*3,(a+b)),c);//购买3本所需要的最小代价 else if(s==2) k=min(min(2*a,b),c*2);//购买2本所需要的最小代价 else k=min(min(a,c*3),c+b);//购买1本所需要的最小代价 printf("%lld\n",k); } } }
Problem D: 勤奋的涟漪2
[align=left]原题链接:http://gdutcode.sinaapp.com/problem.php?cid=1051&pid=3[/align]
Description
涟漪进入集训队后,他会去实验室训练或者去操场锻炼。 接下来n天,每天的情况是一下4种中的一种: 1.当天体育馆关门了和没有训练赛 2.当天体育馆关门了和有训练赛 3.当天体育馆开放和没有训练赛 4.当天体育馆开放和有训练赛 涟漪知道之后n天的情况。 涟漪每一天可以休息,或者打训练赛(当天有训练赛)或者运动(当天体育馆开放)。 涟漪要制定一个训练计划,决定每天干什么,但是涟漪不会连续两天都运动或者连续两天都打训练赛, 请帮涟漪找出她最少休息的天数(她不打训练赛和运动)。 休息的时候,她会做下面的数学题Input
[align=left]第一行一个整数t(t<=100),代表测试数据, 第二行一个整数 n(1<=n<=100) 第三行有n个数a1,a2,a3,....an(0<=ai<=3)) ai=0 ,代表第一种情况 ai=1,代表第二种情况 ai=2 ,代表第三种情况 ai=3 ,代表第四种情况[/align]Output
输出 一个数 表示(涟漪休息的天数) 乘以(数学题的答案的积)。Sample Input
47
1 3 3 2 1 2 3
1
1
1
2
1
3
Sample Output
00
0
0
[align=left]ps:除了那个数学表达式,就没什么了,,然而坑的是比赛的时候我竟然没看这道题。。(数学表达式的结果是-24)[/align]
[align=left]代码:[/align]
#include<stdio.h> int main() { int t; scanf("%d",&t); while(t--) { long long int n,i,s=0; scanf("%lld",&n); long long int ans=0,cnt=0;//ans记录前一天训练的状态,cnt记录前一天运动的状态 for(i=0; i<n; i++) { long long int x; scanf("%lld",&x); if(x==0) { s++; ans=0,cnt=0; } else if(x==1) { if(cnt) { s++; ans=0; cnt=0; } else { cnt=1; ans=0; } } else if(x==2) { if(ans) { s++; ans=0; cnt=0; } else { ans=1; cnt=0; } } else if(x==3) { if(ans&&!cnt) { cnt=1; ans=0; } else if(cnt&&!ans) { ans=1; cnt=0; } else if(ans&&cnt) { s++; ans=0,cnt=0; } } } printf("%lld\n",s*(-24)); } }
[align=center]Problem E: 穷游中国在统题[/align]
[align=left]原题链接:http://gdutcode.sinaapp.com/problem.php?cid=1051&pid=4[/align]
Description
Travel_poorly队是广工大目前最年轻的金牌队伍,队内成员分别是tmk、YFQ、Maple。这天他们接到教练的order要给新生杯统题,统题是个不轻松的工作,要评估各个题目的难度,设计出一套有梯度的套题,使得做题的情况有区分度。tmk很快想出了解决的办法,他给每道题目都设置了一个难度值,然后按照难度值进行筛选题目,这时候他发现难度值刚开始有可能是无序的,于是他决定要让全部题目都按照难度值从小到大排好序。 这时候YFQ说让他来排序,排序是一个展现算法魅力的过程,他要通过一种有趣的方法来给题目的难度值排序:首先他把题目划分成很多组,每组的题目都是连续的,例如某一组包含从i到j的题目,那么这一组包含的是第i,i+1,i+2,i+3,...,j题。 这样每道题都属于某一个组,然后他再到组内把题目按照难度值进行从小到大排序。 当每个组内都进行排序之后,最终全部题目的难度值将按照从小到大的顺序排列好。 我们知道每一组里面的题目越多,排序的压力就越大,所以Maple提出一个合理的要求,就是让每个组里面的题目数量尽可能的少,聪明的ACMer,你知道Travel_poorly一共要分出多少个组吗?
Input
[align=left]第一行是一个整数t ( t<= 10 ),表示有t组数据。在每组数据中: 第一行是一个整数n ( n<=1000 00 ),表示题目的总数; 第二行是n个整数A1,A2,A3...An ( 0<=Ai<= 1000 000 000),表示每道题目的难度值[/align]Output
[align=left]对于每组数据,输出一个正整数,表示一共要分出多少个组能满足Travel_poorly的要求,每两组样例之间输出一个空行。[/align]Sample Input
25
3 2 5 4 6
5
5 4 3 2 1
Sample Output
31
ps:想了半天没明白题意。。最后看了下别人写的代码才略懂,,引用一下大神的话
[align=left]比如3 2 5 4 6[/align]
[align=left]排序之后是 2 3 4 5 6[/align]
[align=left]那么排序后的2所谓的位置到排序前2所在的位置这一个区间是必须被分在一个区间内的。[/align]
[align=left]所以题目就变成了判断原来位置和排序后位置的区间的问题[/align]
[align=left]显然相交的区间需要合并成一个区间[/align]
[align=left]然后计算区间个数即可[/align]
[align=left]但是注意,当难度值一样的时候,还是按照原来的顺序比较好。[/align]
[align=left]代码:
[/align]
#include<iostream> #include<algorithm> using namespace std; const int N=100000+10; struct zxc { int xx,mm; } a ; bool cmp(struct zxc x,struct zxc y) { return x.mm<y.mm; } int main() { int t,c=0; e3b2 cin>>t; while(t--) { int n,i,j; cin>>n; for(i=1; i<=n; i++) { a[i].xx=i;//记录原先所在的位置 cin>>a[i].mm; } stable_sort(a+1,a+n+1,cmp);//稳定排序 int tot=0; i=1; while(i<=n) { tot++; int k=a[i].xx; for(j=i; j<=k; j++)//相交的区间合并 if(a[j].xx>k) k=a[j].xx; i=k+1; } cout<<tot<<endl<<endl; } }
[align=center]
Problem H: 《为什么会变成这样呢》[/align]
[align=left]原题链接:http://gdutcode.sinaapp.com/problem.php?cid=1051&pid=7[/align]
Description
[align=left]“第一次有了喜欢的人,还得到了一生的挚友,两份喜悦互相重叠,这双重的喜悦又带来了更多更多的喜悦,本应已经得到了梦幻一般的幸福时光,然而,为什么,会变成这样呢?”双重的喜悦感却无法带来更多的幸福,现在,雪菜在很多喜悦感之中只想要得到两份不重叠的喜悦感(其他的喜悦感都是重叠的),你能帮她找出这两份不同的喜悦感是多少吗?[/align]Input
[align=left]第一行一个整数T,代表数据的组数(1<=T<=10),接下来T组数据,每组数据的第一行是一个整数n(1<=n<=1000000),第二行是n个整数ai(0 <= ai <= 1000000000)代表喜悦感,每两个整数之间有一个空格,题目保证有且仅有两个不同的整数出现一次,其他的整数都是出现两次。[/align]Output
[align=left]对于每组数据,输出两个整数,分别代表两份不同的喜悦感,中间有一个空格,并且喜悦感较小的先输出。[/align]Sample Input
26
2 2 1 1 3 4
4
1 1 3 4
Sample Output
3 43 4
ps:注意,喜悦感相同的喜悦是重复出现的,所以只要出现一个与前后各不相同的数就说明找到了这两个数,可以用数组模拟,然而我用了万恶的栈,还好还好,差一点就超时。
[align=left]代码:[/align]
#include<stdio.h> #include<string.h> #include<stack> using namespace std; int main() { int t; scanf("%d",&t); while(t--) { stack<int>s; int n,i,k; scanf("%d",&n); for(i=0; i<n; i++) { scanf("%d",&k); if(s.empty()) s.push(k); else { if(k==s.top()) s.pop(); else s.push(k); } } int a,b; a=s.top(); s.pop(); b=s.top(); if(a>b) printf("%d %d\n",b,a); else printf("%d %d\n",a,b); } }
Problem I: 只会做水题的jiakin
[align=left]原题链接:http://gdutcode.sinaapp.com/problem.php?cid=1051&pid=8[/align]
ps:估计是后台数据没传好,随便交个代码只要不出编译错误就过了。。。巨坑
[align=left]原谅本人还不太会算法,没能写出来,,不过有详细解释,请看大神代码:http://blog.csdn.net/jnxxhzz/article/details/53455518[/align]
[align=left]
[/align]
ps:其他题比较水,做一下水水就好,就不贴上来了
。
相关文章推荐
- 2016广东工业大学新生杯决赛网络同步赛暨全国新生邀请赛
- 2016广东工业大学新生杯决赛网络同步赛暨全国新生邀请赛
- 2016广东工业大学新生杯决赛网络同步赛暨全国新生邀请赛
- 2016广东工业大学新生杯决赛网络同步赛暨全国新生邀请赛
- 2016广东工业大学新生杯决赛网络同步赛暨全国新生邀请赛
- 2016广东工业大学新生杯决赛网络同步赛暨全国新生邀请赛
- 2016广东工业大学新生杯决赛网络同步赛暨全国新生邀请赛 题解&源码
- 2016广东工业大学新生杯决赛网络同步赛暨全国新生邀请赛
- 2016广东工业大学新生杯决赛网络同步赛暨全国新生邀请赛总结
- 2016广东工业大学新生杯决赛网络同步赛暨全国新生邀请赛
- 2016广东工业大学新生杯决赛网络同步赛暨全国新生邀请赛
- 2016广东工业大学新生杯决赛网络同步赛暨全国新生邀请赛
- 2016广东工业大学新生杯决赛网络同步赛暨全国新生邀请赛 几个写出来了的题目
- 2016广东工业大学新生杯决赛网络同步赛暨全国新生邀请赛
- 2016广东工业大学新生杯决赛网络同步赛暨全国新生邀请赛
- Contest1051 - 2016广东工业大学新生杯决赛网络同步赛暨全国新生邀请赛
- 2016广东工业大学新生杯决赛网络同步赛暨全国新生邀请赛
- codeforces 699C(广东工业大学新生杯决赛网络同步赛暨全国新生邀请赛)
- gdutcodeProblem D: 勤奋的涟漪2(新生杯决赛网络同步赛暨全国新生邀请赛)
- 哈尔滨理工大学软件学院ACM程序设计全国邀请赛(网络同步赛)F Fibonacci Again