G 水题wa了两次次简直要哭了:
给一个不超过三十位的数字,让你判断其值的是在 short, int ,long long 这三个哪一个的范围。
自己用 char 没考虑清楚就开始敲,wa的心酸酸的,看了学长的代码,简直发现了新大陆,
原来 string 类型还可以这样用啊 = = 真心长见识了,原谅我的无知,毕竟我是要励志做萌妹子的人。
照着学长的思路敲了一遍 升级版的代码2.0 感觉自己萌萌哒!!!
全部的输入数据都加上前导零用来方便比较。
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
using namespace std;
int main()
{
cin.sync_with_stdio(false);
string str;
while (cin >> str)
{
string num[3] = { "000000000000000000000000032767", "000000000000000000002147483647", "000000000009223372036854775807" };
string temp ="";
int len = str.length();
int s = 0;
if (str[0] == '-')
{
len--;
s++;
for (int i = 0; i < 3; ++i)
{
num[i][29] = '8';
}
}
for (int i = 0; i < 30 - len; ++i)
{
temp += '0';
}
for (int j = s; j < len + s; ++j)
{
temp += str[j];
}
if (temp <= num[0])puts("short");
else if (temp <= num[1])puts("int");
else if (temp <= num[2])puts("long long");
else puts("It is too big!");
}
return 0;
}
D 在公式推导上理解无能了一下 T T:
如果一把剑的重量不超过勇士的能力值,那么这个勇士就能拿起这把剑。每个勇士拿起一把剑。
给你 N 把剑,N 个勇士,问有多少种勇士拿剑的方式。组合数学问题。
数据:
3 --》 N 值
2 3 4 --》 每把剑的重量
6 3 5 --》 每个勇士的能力值
贪心思想,将剑的重量与勇士的能力值做一个sort从小到大的排序。
下标: 0 1 2
剑: 2 3 4
勇士: 3 5 6
0号勇士可以拿起0号或者一号剑 那么有两种选择 *2;
一号勇士可以拿除去零号勇士挑选后的两把剑 *2;
二号勇士能力高于三把剑,但只剩下一把剑 *1;
所以一共有 4 种勇士拿剑的方式。
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn = 100000+5;
const int MOD = 1000000007;
int heros[maxn], swords[maxn];
#define FOR(i,n) for(int i=0;i<n;++i)
typedef long long ll;
int main()
{
int t,n;
cin >> t;
for (int j = 1; j <= t;++j)
{
cin >> n;
FOR(i, n)
cin>>swords[i];
FOR(i, n)
cin>>heros[i];
sort(swords, swords + n);
sort(heros, heros + n);
int ans = 1;
int l = 0;
FOR(i, n)
{
while (l < n && heros[i] >= swords[l]) l++;
ans = (ll)ans * (l - i) % MOD;
}
//============= answer ==========
printf("Case #%d: %d\n", j,ans);
}
return 0;
}