Codeforces #107 div 2

心情不好然后去写Div2,发现:
A题不是SB题吗?
B题不是SB题吗?
C题不是SB题吗?
D题不是SB题吗?
然后考场只A掉了A和C……
考完之后3分钟把B和D都调出来了……
对于这种情况我只能说MDZZ……


T1:看样例怎么算的,然后随便模拟一下,都没看题面。

#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#define Rep(i,n) for(int i = 1;i <= n;i ++)
using namespace std;
int main ()
{
    long long n,a,b,c,d,e,f,g;
    scanf("%I64d%I64d%I64d%I64d%I64d%I64d%I64d%I64d",&n,&a,&b,&c,&d,&e,&f,&g);
    a *= b;
    a /= f;
    c *= d;
    e /= g;
    printf("%I64d\n",min(a,min(c,e)) / n);
    return 0;
}

T2:我一直以为是四种人……然而只有三种……
感觉自己英语有待提升……
大模拟题。

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <map>
using namespace std;
const int N = 1005;
struct Kill{int vis[5];string name;}o[N];
bool vis[16];
int Maxn[56]; 
int main ()
{
    int n;
    cin >> n;
    for(int i = 1;i <= n;i ++)
    {
        int p ;
        cin >> p;
        cin >> o[i].name;
        for(int j = 1;j <= p;j ++)
        {
            int a,b,c,x,y,z;
            scanf("%d-%d-%d",&a,&b,&c);
            x = a,y = b,z = c;
            int pa = a % 10;a /= 10;
            int pb = b % 10;b /= 10;
            int pc = c % 10;c /= 10;
        //  if((a == pa - 1 || pa == a - 1) && (b == pb - 1  || pb == b - 1)&& (c == pc - 1 || c == pc + 1))continue;
            vis[a] = 1,vis[pa] = 1,vis[pb] = 1,vis[pc] = 1,vis[b] = 1,vis[c] = 1;
            //printf("%d %d %d %d %d %d\n",a,pa,b,pb,c,pc);
            int cnt = 0;
            for(int k = 0;k <= 9;k ++)if(vis[k])cnt ++,vis[k] = 0;
            if(cnt == 6 && a > pa && pa > b && b > pb && pb > c && c > pc)o[i].vis[2] ++,Maxn[2] = max(Maxn[2],o[i].vis[2]);
            else if(cnt == 1)o[i].vis[1] ++,Maxn[1] = max(Maxn[1],o[i].vis[1]);
            else o[i].vis[3] ++,Maxn[3] = max(Maxn[3],o[i].vis[3]);
        }
    }
    printf("If you want to call a taxi, you should call:");
    int pos;
    for(pos = n;pos;pos --)if(o[pos].vis[1] == Maxn[1])break;
    for(int i = 1;i < pos;i ++)if(o[i].vis[1] == Maxn[1])cout << " " << o[i].name << ",";
    cout <<" "<< o[pos].name << "." << endl;
    printf("If you want to order a pizza, you should call:");
    for(pos = n;pos;pos --)if(o[pos].vis[2] == Maxn[2])break;
    for(int i = 1;i < pos;i ++)if(o[i].vis[2] == Maxn[2])cout << " " << o[i].name << ",";
    cout <<" "<< o[pos].name << "." << endl;
    printf("If you want to go to a cafe with a wonderful girl, you should call:");
    for(pos = n;pos;pos --)if(o[pos].vis[3] == Maxn[3])break;
    for(int i = 1;i < pos;i ++)if(o[i].vis[3] == Maxn[3])cout << " " << o[i].name << ",";
    cout <<" "<< o[pos].name << "." << endl;
    return 0;
}

T3:
两个小孩打算对一个数进行操作,每次可以把这个数除以一个它的因子,但是不能除以1或者它本身。
现在问你采取最优策略,谁先会除到1,如果是A的话,输出第一次操作之后剩下给B的数是什么。

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
typedef pair<int,long long> pii;
bool no[30000005];
int p[5000005],cnt;
pii Div(long long x)
{
    long long xx = x;
    bool flag = 1;
    for(int i = 1;1ll * p[i] * p[i] <= x;i ++)if(x % p[i] == 0){flag = 0;break;}
    if(flag)return pii(1,0);
    long long ans = 1;
    int cp = 0;
    for(int i = 1;i <= cnt && cp < 2;i ++)
    {
        bool fl = 0;
        if(1ll * p[i] * p[i] == xx && cp == 0)return pii(2,0);
        if(x % p[i] == 0)x /= p[i],fl = 1;
        if(fl)ans *= p[i],cp ++;
    }
    if(x == 1)return pii(2,0);
    if(cp == 1)
    {
        flag = 1;
        for(int i = 1;1ll * p[i] * p[i] <= x;i ++)if(x % p[i] == 0){flag = 0;ans *= p[i];break;}
        if(flag)return pii(2,0);
        else return pii(1,ans);
    }
    if(cp == 2)return pii(1,ans);
}
void Get()
{
    for(int i = 2;i <= 10000000;i ++)
    {
        if(!no[i])p[++ cnt] = i;
        for(int j = 1;j <= cnt && i * p[j] <= 10000000;j ++)
        {   no[i * p[j]] = 1;
            if(i % p[j] == 0)break;
        }
    }
}
int main ()
{
    long long x;
    scanf("%lld",&x);
    Get();
    pii w = Div(x);
    int xx = w.first;
    long long y = w.second;
    if(xx == 2)return printf("%d\n",2),0;
    else printf("%d\n%I64d\n",1,y);
    return 0;
}

T4:

#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;
const int Mod = 1e9 + 7;
long long Power(long long a,long long p)
{
    long long ans = 1;
    for(int i = 1;i <= p;i ++)ans = ans * a % Mod;
    return ans;
}
int main ()
{
    long long n,m,k;
    scanf("%I64d%I64d%I64d",&n,&m,&k);
    if(k % 2 == 0 && k < n)printf("%I64d\n",m);
    if(k == 1 || k > n)printf("%I64d\n",Power(m,n) % Mod);
    else if(k == n)printf("%I64d\n",Power(m,(n + 1) >> 1) % Mod);
    else if(k & 1)printf("%I64d\n",1ll * m * m % Mod);
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值