2017
今年9月份的最新题,还是有必要做一下的,然而网上搜不到题解,就比较坑了,没事,没做出来的题等下次ccf之前再补吧,看这段时间自己又能长进多少
201709-1打酱油
思路:这题一开始看到还有点懵,但这个样例的说明也太给了了吧,直接把做法就给出来说,分类讨论,瞬间秒做;
其实根据数据范围完全可以模拟的,单为了锻炼自己的计算能力,还是推了一下公式,这个能力还是需要的,毕竟之后无论什么题目似乎如果能用公式都比模拟好
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <cstring>
#include <map>
#include <cmath>
#include <string>
#include <queue>
#include <stack>
using namespace std;
a
const int maxn = 1e5+10;
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
int sum = 0;
/*while(n>=50)
{
n -= 50;
sum += 7;
}*/
int p1 = n/50;
n %= 50;
sum += p1*7;
/*while(n>=30)
{
n -= 30;
sum += 4;
}*/
int p2 = n/30;
n %= 30;
sum += p2*4;
/*while(n>=10)
{
n -= 10;
sum += 1;
}*/
int p3 = n/10;
sum += p3;
printf("%d\n",sum);
}
return 0;
}
201709-2公共钥匙盒
思路:这题给的是每个老师的上课时间,拆分转化为钥匙交接的记录,按时间进行模拟就好了,建立数据结构存储时间,然后注意一下排序的原则就好了
最后,注意一下,不仅需要数组记录每个位置的钥匙,还需要单开一个数组记录钥匙的位置便于跟踪,其他就没什么了,30min2题,还好
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <cstring>
#include <map>
#include <cmath>
#include <string>
#include <queue>
#include <stack>
using namespace std;
const int maxn = 2010;
typedef struct EVENT
{
bool borrow;
int id;
int time;
}Event;
Event e[maxn];
int key[maxn];
int keypos[maxn];
bool cmp(const Event &a, const Event &b)
{
if(a.time<b.time)
{
return true;
}
else if(a.time==b.time)
{
if((!a.borrow)&&b.borrow)
{
return true;
}
else if((!a.borrow)&&(!b.borrow))
{
if(a.id<b.id)
{
return true;
}
}
}
return false;
}
int main()
{
int n,k;
while(scanf("%d%d",&n,&k)!=EOF)
{
for(int i=1;i<=n;i++)
{
key[i] = i;
keypos[i] = i;
}
for(int i=0;i<k;i++)
{
int keyid,keytime,keylast;
scanf("%d%d%d",&keyid,&keytime,&keylast);
e[2*i].borrow = true;
e[2*i].id = keyid;
e[2*i].time = keytime;
e[2*i+1].borrow = false;
e[2*i+1].id = keyid;
e[2*i+1].time = keytime+keylast;
}
sort(e,e+2*k,cmp);
for(int i=0;i<2*k;i++)
{
if(e[i].borrow)
{
key[keypos[e[i].id]] = 0;
keypos[e[i].id] = 0;
}
else
{
for(int pos=1;pos<=n;pos++)
{
if(key[pos]==0)
{
key[pos] = e[i].id;
keypos[e[i].id] = pos;
break;
}
}
}
}
printf("%d",key[1]);
for(int i=2;i<=n;i++)
{
printf(" %d",key[i]);
}
printf("\n");
}
return 0;
}
201709-3JSON查询
思路:这题完全是字符串处理问题,用惯了scanf和字符串数组的我,对cin和getline真心手足无措,研究了好长时间
不过,这题确实信息量有点大,而且入手点也特别多,像冒号,引号,逗号都可以作为处理对象,而且后来发现任意处理一个结果都是一样的
但刚碰到的时候,就会思路一片混乱,不易冷静
有时候,一步步慢慢检查要比一起写完反而不知道哪里错了要好,不过还是细心吧,不出错总归是好的