赛后打脸 - ACdream原创群赛(18)のAK's dream 简单题总结

来源:互联网 发布:网络上游初始化失败 编辑:程序博客网 时间:2024/06/05 17:10

G 水题wa了两次次简直要哭了:


   给一个不超过三十位的数字,让你判断其值的是在 short, int ,long long 这三个哪一个的范围。

   自己用 char 没考虑清楚就开始敲,wa的心酸酸的,看了学长的代码,简直发现了新大陆,

   原来 string 类型还可以这样用啊 = = 真心长见识了,原谅我的无知,毕竟我是要励志做萌妹子的人。


   照着学长的思路敲了一遍 升级版的代码2.0 感觉自己萌萌哒!!!

   

   全部的输入数据都加上前导零用来方便比较。


   G:Integer in C++

#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 个勇士,问有多少种勇士拿剑的方式。组合数学问题。

G:Heros and Swords

数据:

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;} 






      


0 0