GDUT2016年ACM新生杯初赛题解
题目链接
Problem A: 贪吃的zhazhahe
Description
Input
Output
Sample Input
Sample Output
HINT
/*分析:首先我们知道n个饼总的需要烤的面数是2*n,每次我们最多可以烤k面,所以烤的最小次数是2*n/k(整除时),或者2*n/k+1(不整除时,余数部分需要整体烤一次)
*/
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
typedef long long ll;
int main()
{int t;cin>>t;while(t--){int n,k;scanf("%d%d",&n,&k);if(n<=k){printf("%d\n",2);continue;}if(2*n%k!=0) printf("%d\n",2*n/k+1);else printf("%d\n",2*n/k);}return 0;
}
/**************************************************************Problem: 1196User: MDZZhhhLanguage: C++Result: AcceptedTime:0 msMemory:1696 kb
****************************************************************/
Problem B: 签到题
Description
Input
Output
Sample Input
Sample Output
HINT
/*分析:把每一位加起来判断是否能够整除3即可。
*/
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
typedef long long ll;
const int maxn = 505;
char s[maxn];
int main()
{int t;cin>>t;while(t--){scanf("%s",s);int len=strlen(s);int sum=0;for(int i=0;i<len;i++){sum+=s[i]-'0';}if(sum%3)puts("Why would it be like this");else puts("Three people are the most stable");}return 0;
}/**************************************************************Problem: 1197User: MDZZhhhLanguage: C++Result: AcceptedTime:0 msMemory:1696 kb
****************************************************************/
Problem C: 算罚时
Description
Input
Output
Sample Input
Sample Output
/*分析:按照题意写就行了
*/
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
typedef long long ll;
const int maxn = 505;
int main()
{int t;cin>>t;while(t--){int a,b,sum=0;for(int i=0;i<8;i++){scanf("%d:%d",&a,&b);sum+=a*60+b;}printf("%d\n",sum);}return 0;
}/**************************************************************Problem: 1198User: MDZZhhhLanguage: C++Result: AcceptedTime:0 msMemory:1696 kb
****************************************************************/
Problem D: 有趣的游戏
Description
有个小师妹找zhazhahe玩游戏。他们有一堆n个珠子,每人轮流拿走若干个,轮到谁的回合拿不了珠子就算输。给出一个n,每次能拿走的珠子数量在区间[l,r]内(如果剩余珠子不足就不能拿,判输),小师妹先开始拿。假设小师妹和zhazhahe都非常聪明,会采取最优策略,问谁会赢得游戏?
Input
有多组样例,第一行输入一个样例数T(0<T<=1000)
每个样例只有一行,三个正整数n,l,r (0<n<=1000) (0<l<=r<=1000)
Output
每个样例只有一行,如果小师妹赢了输出“Win”,输了就输出“Lose”。
Sample Input
Sample Output
HINT
/*类型:博弈分析:这种类型题的基本思路是找到一种恒定不变的方式,使得对方无论怎么拿,你都能找到对应要拿的数量举个例子,假如n=22,取的区间为[1,2],那么小师妹第一次拿走1个,使得剩下的数量21,是区间左右端点之和的倍数,即3的倍数.那么无论对方怎么拿,我们都能维持剩下来的数量是3的倍数的状态不变,比如他拿1个,你就拿2个,或者他拿2个,你就拿1个始终保持他能拿,我必能拿的状态,那么只要判断初始情况,我就知道我能不能稳赢回顾刚刚的拿法,我们很容易推出一个方式判断第一个人应该如何拿,即余数=n%(L+R)1.假设这个余数落在[L,R]里面,那么小师妹第一次把余数全抓走,剩下的是(L+R)的倍数,我们知道,小师妹稳赢2.假设这个余数为L-k (0<k<=L)里面,那么因为只能抓[L,R]个珠子,小师妹动不了余数这个数目,她只能先动(L+R)里面合法的某些数目,那么第二个人能对应着拿掉小师妹在(L+R)里面剩下的数目,情况变成小师妹稳输3.假设这个余数落在R+L-k (0<k<L)里面,那么小师妹第一次拿走R个,剩下的数目为L-k即把第二种状态丢给对方,小师妹稳赢所以题目可以解决.
*/
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
typedef long long ll;
const int maxn = 505;
int main()
{int t;cin>>t;while(t--){int n,l,r;scanf("%d%d%d",&n,&l,&r);if(n%(l+r)<l)puts("Lose");else puts("Win");}return 0;
}/**************************************************************Problem: 1199User: MDZZhhhLanguage: C++Result: AcceptedTime:0 msMemory:1696 kb
****************************************************************/
Problem E: 套套套
Description
矩形A能与矩形B不接触的放在矩形B里就称为矩形A能嵌套进矩形B。
给你n个矩形,编写程序,判断它们能否互不接触嵌套n层。
如:有2 * 2 , 4*5,3*4 三个矩形。
方案一嵌套非法,但是方案二合法(嵌套顺序任意),所以2*2,3*4,4*5满足条件
Input
第一行一个整数t(t < 15 ),表示有t组数据。 每组数据第一行一个整数n(n < 10000),矩形的个数,接下去的n行,每行两个正整数x和y(由空格分开),第i行表示第i个矩形的长为x和宽为y。(0 < y <= x < 100000 )
Output
每组数据输出一行,矩形能完成嵌套则输出“Yes”,否则输出“No”。(不包含双引号)
Sample Input
Sample Output
HINT
/*分析:因为题目限制了n个矩形要达到n层嵌套,所以对于n个矩形能否满足条件,我们只需要先对所有矩形的面积从小到大排序,再判断相邻两个矩形能否嵌入即可
*/
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
typedef long long ll;
const int maxn = 10000+5;
struct rt{ll x,y,s;
};
rt a[maxn];
bool cmp(const rt&a,const rt&b){return a.s<b.s;
}
int main()
{int t;cin>>t;while(t--){int n;scanf("%d",&n);for(int i=0;i<n;i++){scanf("%lld%lld",&a[i].x,&a[i].y);a[i].s=a[i].x*a[i].y;}sort(a,a+n,cmp);int flag=1;for(int i=1;i<n;i++){if((a[i].x>a[i-1].x&&a[i].y>a[i-1].y)||(a[i].x>a[i-1].y&&a[i].y>a[i-1].x))continue;else{flag=0;break;}}if(flag)puts("Yes");else puts("No");}return 0;
}/**************************************************************Problem: 1200User: MDZZhhhLanguage: C++Result: AcceptedTime:8 msMemory:1940 kb
****************************************************************/
Problem F: 吃豆豆
Description
Input
Output
Sample Input
Sample Output
HINT
/*分析:判断一个数的二进制里面有几个1,不断对2取模和除2,看有几个满足即可
*/
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
typedef long long ll;
const int maxn = 10000+5;
int main()
{//int t;cin>>t;ll n;while(~scanf("%lld",&n)&&n!=-1){int sum=0;while(n){sum+=n%2;n/=2;}printf("%d\n",sum);}return 0;
}/**************************************************************Problem: 1201User: MDZZhhhLanguage: C++Result: AcceptedTime:8 msMemory:1696 kb
****************************************************************/
Problem G: Pigofzhou和他的那么多个学妹
Description
男神pigofzhou在开学还没多久就基本上与16级几乎所有的师妹打成了一片,不过由于男生pigofzhou认识的师妹太多了,但是又怕忘了,于是就拿个本子记录下来,有一天他忽然想看一下这本本子有多少面,但是毕竟是pigofzhou怎么可能直接去数本子有多少面呢,于是对于每一页的页码都用键盘敲到电脑上,然后数自己敲了几次键盘,从而计算出本子有多少面,可以吧,这很pigofzhou,例如页码为1~9页,每页敲一下键盘,页码为10~99页,每页敲2下键盘,页码为100~999页,每页敲三下,以此类推。
Input
输入一个正整数t(0<t<3000)表示样例组数,每组样例输入一个正整数n(0<n<1e12),表示敲了n下键盘。
Output
输出一个正整数表示这本本子有多少面
Sample Input
Sample Output
HINT
虽然广工没那么多女生,但是数据并不小
/*分析:先预处理出第9、99、999、9999...页敲击键盘的次数,得到边界值,然后每次用边界值查找到n属于那个区域,再用n减去下界的次数得到从该区域第一个页数到当前页数的总敲击次数再用敲击次数求出该页数是在当前区域的第几个,再-1+10^数字的位数,就是答案
*/
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
typedef long long ll;
const int maxn = 10000+5;
ll a[15],p[15];//a储存边界值,p[i]表示10^(i-1)
int main()
{a[1]=9;p[1]=1;for(ll i=2,t=10;i<=13;i++,t*=10){a[i]=i*9*t+a[i-1];p[i]=t;}int t;cin>>t;while(t--){ll n;scanf("%lld",&n);for(int i=1;i<=13;i++){if(a[i]>n){printf("%lld\n",(n-a[i-1])/i-1+p[i]);break;}}}return 0;
}/**************************************************************Problem: 1202User: MDZZhhhLanguage: C++Result: AcceptedTime:0 msMemory:1696 kb
****************************************************************/
Problem H: 神奇的清华大大的神奇魔法
Description
Input
Output
Sample Input
Sample Output
HINT
/*类型:贪心+模拟分析:先记录26个字母的出现次数num[],若num[i]为奇数,且只有一个字母,那么可以直接输出若存在多个num[i]为奇数这时分两种情况:1.需要把其它字母改为当前字母;2.把该字母改为其它字母。为了得到最小字典序,我们贪心的选择将字典序大的字母改为字典序小的字母,按照这样的思维模拟下去。
*/
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<list>
using namespace std;
typedef long long ll;
const int maxn = 200000+5;
char s[maxn];
int a[30],n;void print(){int flag=-1;for(int i=0;i<26;i++){if(a[i]%2)flag=i;}if(flag==-1){for(int i=0;i<26;i++){int len=a[i]/2;for(int j=0;j<len;j++){printf("%c",i+'a');}a[i]-=len;}for(int i=25;i>=0;i--){for(int j=0;j<a[i];j++){printf("%c",i+'a');}}puts("");}else{int cnt=0;for(int i=0;i<26;i++){int len=a[i]/2;for(int j=0;j<len;j++){printf("%c",i+'a');cnt++;if(cnt==n/2){printf("%c",flag+'a');a[flag]--;}}a[i]-=len;}for(int i=25;i>=0;i--){for(int j=0;j<a[i];j++){printf("%c",i+'a');}}puts("");}}
int main()
{int t;cin>>t;while(t--){memset(a,0,sizeof(a));scanf("%s",s);int len=strlen(s);n=len;for(int i=0;i<len;i++){a[s[i]-'a']++;}int flag=0;for(int i=0;i<26;i++){flag+=a[i]%2;}if(flag<=1)print();else{int k=26;while(k--){//flag=0;int r=-1,l=-1;for(int i=25;i>=0;i--){if(a[i]%2){if(r==-1){r=i;break;}}}for(int i=0;i<25;i++){if(a[i]%2&&l==-1){l=i;break;}}if(l!=r){a[r]--;a[l]++;}}print();}}return 0;
}/**************************************************************Problem: 1203User: MDZZhhhLanguage: C++Result: AcceptedTime:0 msMemory:1896 kb
****************************************************************/
Problem I: 神枪手TMK
Description
Input
Output
Sample Input
Sample Output
HINT
/*分析:直接写把
*/
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<list>
using namespace std;
typedef long long ll;
const int maxn = 200000+5;int main()
{//int t;cin>>t;int n;while(~scanf("%d",&n)){if(n<0)puts("impossble");else printf("%d\n",2*n+1);}return 0;
}/**************************************************************Problem: 1204User: MDZZhhhLanguage: C++Result: AcceptedTime:0 msMemory:1696 kb
****************************************************************/
Problem J: 神龙的烦恼
Description
Input
Output
Sample Input
Sample Output
HINT
/*分析:价格从小到大买就行了
*/
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<list>
using namespace std;
typedef long long ll;
const int maxn = 1e6+5;
struct babi{ll num,val;
};
babi a[maxn];
bool cmp(const babi&a,const babi&b){return a.val<b.val;
}
int main()
{int n,m;scanf("%d%d",&n,&m);ll sum=0;for(int i=0;i<n;i++){scanf("%d%d",&a[i].num,&a[i].val);sum+=a[i].num;}if(sum<m)puts("-1");else{sort(a,a+n,cmp);sum=0;for(int i=0;i<n;i++){if(a[i].num<m){sum+=a[i].val*a[i].num;m-=a[i].num;}else{sum+=a[i].val*m;break;}}printf("%lld\n",sum);}return 0;
}/**************************************************************Problem: 1205User: MDZZhhhLanguage: C++Result: AcceptedTime:0 msMemory:0 kb
****************************************************************/
GDUT2016年ACM新生杯初赛题解相关推荐
- 长大 ACM新生杯试题一(个人解法)
长大 ACM新生杯试题一(个人解法): 来自我们可可爱爱的彩虹岛!!! 题目一: A 跷跷板 Description 自从彩虹岛新引进了一批设备,同学们的校园生活变得更加丰富了.彩虹岛流传着一句话:& ...
- ACM新生赛部分题解
2021级的ACM新生赛已经完结了,我就自己做出来的八道题整理一下题解,因为其他是真的不会. 链接:登录-专业IT笔试面试备考平台_牛客网 来源:牛客网 一.我们是冠军 7 日星期 777 的凌晨,7 ...
- [ACM] 第八届西邮杯初赛题解
Problem A: 加法变乘法 Time Limit: 10 Sec Memory Limit: 256 MB Description 已知X可以写成从1开始连续若干个整数的和, 现在要求把其中两个 ...
- 2020湖南大学ACM新生杯题解- D Treasure Cave
思路: 将地上的所有数和空中的数放在一起排序,空中的拿出意思就是可以最终从这个排好序的序列中抽出任意一个数,使得剩下的序列为严格的上升序列. 并且题目希望尽可能大,检查这个排好序的序列,如果这个序列中 ...
- 第三届ACM/ICPC新生赛初赛题解
A //注意感叹号为中文字符 #include<stdio.h> int main(){printf("I am a ACMer !\n");return 0; } B ...
- 林湾村男子铁路技术职业学院2022年5月ACM校赛初赛题解
传送门:SWJTUOJ A题 Bob每次最多走一格,最多走300步,而起始位置在0~300之间,所以最多也就走到600这样子,那么只需要记录最低600位就可以了. 每次乘的时候,时间复杂度为: 其中n ...
- 2018“西邮杯”初赛题解
1.加法变乘法 已知X可以写成从1开始连续若干个整数的和, 现在要求把其中两个不相邻的加号变成乘号,使得结果为Y. 找出所有满足条件的可能答案并输出(把两个乘号左边的数字用小括号括起来,中间用英文逗号 ...
- 第五届B组传智杯初赛题解
第一题: 题目背景: 在宇宙射线的轰击下,莲子电脑里的一些她自己预定义的函数被损坏了. 对于一名理科生来说,各种软件在学习和研究中是非常重要的.为了尽快恢复她电脑上的软件的正常使用,她需要尽快地重新编 ...
- 2016广东工业大学新生杯决赛网络同步赛暨全国新生邀请赛 题解源码
Problem A: pigofzhou的巧克力棒 Description 众所周知,pigofzhou有许多妹子.有一天,pigofzhou得到了一根巧克力棒,他想把这根巧克力棒分给他的妹子们.具体 ...
- 华南师大 2017 年 ACM 程序设计竞赛新生初赛题解
华南师大 2017 年 ACM 程序设计竞赛新生初赛题解 华南师范大学第很多届 ACM 程序设计竞赛新生赛(初赛)在 2017 年 11 月 20 日 - 27 日成功举行,共有 146 名同学有效参 ...
最新文章
- iOS--资源--优秀app发掘
- python汉诺塔游戏_Python实战:搭建汉诺塔小游戏,快和小伙伴一起玩玩吧
- centos6 kvm网卡桥接
- get与post请求问题
- 详细介绍如何在win7下首次实现通过Git bash向Github提交项目
- 获取日志$6到$NF的字段
- Web安全CSRF攻击与防御
- 新手指导:51CTO微博小技巧
- 从全栈式解决方案到情感化,揭秘问众智能切入车载语音市场的最佳姿势...
- 笔试算法题(26):顺时针打印矩阵 求数组中数对差的最大值
- LeetCode 542. 01 矩阵
- Like rlike在hive中的区别
- csdn 博客添加目录方法
- 防抖与节流方案_手写系列之防抖和节流
- linux界面安装mysql_linux安装mysql可视化界面
- 触摸屏驱动学习并移植
- 如何破解 App 网络代理后出现网络不可用的情况
- Qt环境下调用捷宇高拍仪OCX
- centos刻录工具_centos u盘引导制作工具
- 一起用Python做个自动化弹钢琴脚本,我竟然弹出了《天空之城》!
热门文章
- Matplotlib 绘制条形图
- python编程自然数表达式_结对编程-python实现
- 周末闲暇用javascript写个网页“斗兽棋”小游戏
- 随机游走(Random Walk)算法
- firefox autoproxy 实现ssh代理上网,针对XP,新版可以用firefox的foxproxy组件
- ARM内核矩阵计算教程(STM32)
- android红外接收api,关于安卓红外API:ConsumerIrManager类
- C++输出流cout的执行顺序问题
- python 微信投票脚本_Python自动化刷投票脚本开发,微信投票再也不需要发红包了...
- 1553B总线通信协议