第二场,并没有延续第一场的良好状态,当然,评测姬把spj吞了,也倒是一个方面先看看别的题吧
K. King's Heir
思路:这题就是个简单的数据结构题,创建新数据类型,然后排序,将国王处理后加入一起排序,找到第一个比国王大的就好了
#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 = 110;
typedef struct KING
{
int id;
int day;
int month;
int year;
}King;
bool cmp(const King &a, const King &b)
{
if(a.year > b.year)
{
return true;
}
else if(a.year == b.year)
{
if(a.month > b.month)
{
return true;
}
else if(a.month == b.month)
{
if(a.day > b.day)
{
return true;
}
else if(a.day == b.day)
{
if(a.id < b.id)
{
return true;
}
}
}
}
return false;
}
King k[maxn];
int main()
{
while(scanf("%d%d%d",&k[0].day,&k[0].month,&k[0].year)!=EOF)
{
k[0].id = 0;
k[0].year -= 18;
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d%d%d",&k[i].day,&k[i].month,&k[i].year);
k[i].id = i;
}
sort(k,k+n+1,cmp);
int person;
for(person=0;person<=n;person++)
{
if(k[person].id==0)
{
break;
}
}
if(person == n)
{
printf("-1\n");
}
else
{
printf("%d\n",k[person+1].id);
}
}
return 0;
}
F. Folding
思路:这题不难发现是个幂次处理问题,每个2的幂次作为一个分界点
关键还是归一化思想吧,幂次处理,将很多小细节整体处理
还有,有些时候还是不要想当然,你想的贪心策略未必是对的,如果有条件枚举,就枚举一下,ac就这样来了
#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 = 1e5+10;
const double eps = 1e-6;
int t[40];
int getfold(int mab,int mib,int maa,int mia)
{
if(mab<maa||mib<mia)
{
return 1e9;
}
else
{
int sum = 0;
int mad = mab/maa;
if(mab%maa > 0)
{
mad++;
}
for(int i=0;i<32;i++)
{
if(t[i] >= mad)
{
sum += i;
break;
}
}
int mid = mib/mia;
if(mib%mia > 0)
{
mid++;
}
for(int i=0;i<32;i++)
{
if(t[i] >= mid)
{
sum += i;
break;
}
}
return sum;
}
}
int main()
{
int W,H,w,h;
t[0] = 1;
for(int i=1;i<32;i++)
{
t[i] = t[i-1]<<1;
}
while(scanf("%d%d%d%d",&W,&H,&w,&h)!=EOF)
{
int a = getfold(W,H,w,h);
int b = getfold(W,H,h,w);
int maxsum = min(a,b);
if(maxsum == 1e9)
{
maxsum = -1;
}
//cout <<a<<b<<endl;
printf("%d\n",maxsum);
}
return 0;
}
文章地址:http://blog.youkuaiyun.com/owen_q/article/details/78178543