2016.7.15 打卡

13 篇文章 0 订阅
13 篇文章 3 订阅

第一道:
火柴排队,总算是 把他写过了
我来告诉你我错哪了?
明明一个区间人家是l,r。我非得 写成 l,n。【【手动再见】】

然后 就是%运算 以后开longlong吧,省的会错。。

#include<cstdio>
#include<algorithm>
#include<cstring>
#define ll long long
//by mars_ch
using namespace std;
int n;
struct data
{
    int x;
    int id;
}a[100005],b[100005];
int ans[100005];
int read()
{
    char p=getchar();
    int x=0;
    while(p<'0' || p>'9') p=getchar();
    while(p>='0' && p<='9') x=x*10+p-'0',p=getchar();
    return x;
}
bool cmp(data a,data b)
{
    return a.x<b.x;
}
int c[100005];
ll res=0;
void solve(int l,int r)
{
    if(l>=r) return;
    int mid=(l+r)/2;;
    solve(l,mid);
    solve(mid+1,r);
    int p=l,h=l,t=mid+1;
    while(h<=mid && t<=r)
    {
        if(c[h]<=c[t]) ans[p++]=c[h++];
        else res=(res+(mid-h+1)%99999997)%99999997,ans[p++]=c[t++];
    }
    while(h<=mid) ans[p++]=c[h++];
    while(t<=r) ans[p++]=c[t++];
    for(int i=l;i<=r;i++)
    {
        c[i]=ans[i];
    }
}
int main()
{
    n=read();
    for(int i=1;i<=n;i++)
    {
        a[i].x=read();
        a[i].id=i;
    }
    for(int i=1;i<=n;i++)
    {
        b[i].x=read();
        b[i].id=i;
    }
    sort(a+1,a+n+1,cmp);
    sort(b+1,b+n+1,cmp);
    for(int i=1;i<=n;i++)
    {
        c[a[i].id]=b[i].id;
    }
    solve(1,n);
    printf("%lld\n",res%99999997);
    return 0;
}

第二道:
第一题 还写挂了 你说 我还学不学
另外 这题 你找规律 你 打表都行啊
比如说 你看吧 l和c合成的n l到m到n 中间的差就是c到a的差 我们让a=0 那l 不就是 n-c吗~~~
他是 密码变到明文!!!硬生生的写反了。。。
行吧

#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
using namespace std;
char k[1005],mw[10005];
char ans[10005];
int key[10005];
int main()
{
    cin>>k>>mw;
    int lk=strlen(k);
    int lm=strlen(mw);
    for(int i=0;i<lk;i++)
    {
        if(k[i]<'a') key[i]=k[i]-'A';
        else key[i]=k[i]-'a';
    }
    int p=0;
    while(p<lm)
    {
        ans[p]=mw[p]-key[p%lk];
        if(ans[p]<'A' ||(ans[p]<'a' && mw[p]>='a')) ans[p]=ans[p]+26;  //注意ans【p】有可能就小于‘A'了 会输出乱码。。考虑全一点、。 
        cout<<ans[p];
        p++;
    }
}

回家此番。
第三道:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
struct node
{
    int start,arrive,target;
}a[20000];
int n,m,K,ans;
int f[20000],Time[20000],g[20000],dist[20000],sum[20000];
int main()
{
    scanf("%d %d %d",&n,&m,&K);
    for (int i = 1;i < n;i ++)
        scanf("%d",&dist[i]);
    for (int i = 1;i <= m;i ++)
    {
        scanf("%d %d %d",&a[i].arrive,&a[i].start,&a[i].target);
        f[a[i].start] = max(f[a[i].start],a[i].arrive);
        sum[a[i].target] ++ ;
    }
    for (int i = 2;i <= n;i ++)
        sum[i] += sum[i - 1];

    Time[1] = 0;
    for (int i = 2;i <= n;i ++)
        Time[i] = max(Time[i - 1],f[i - 1]) + dist[i - 1];
    for (int i = 1;i <= m;i ++)
        ans += Time[a[i].target] - a[i].arrive;


    while (K)
    {
        g[n] = n;
        g[n - 1] = n;
        for (int i = n - 2;i ; i -- )
        {
            if (Time[i + 1] <= f[i + 1])
                g[i] = i + 1;
            else g[i] = g[i + 1];
        }
        int Max = 0,j;
        for (int i = 1;i <= n;i ++)
            if (sum[g[i]] - sum[i] > Max && dist[i] > 0)
                Max = sum[g[i]] - sum[i],j = i;
        if (!Max) break;
        ans -= Max;
        dist[j] --;
        K --;
        Time[1] = 0;
        for (int i = 2;i <= n;i ++)
            Time[i] = max(Time[i - 1],f[i - 1]) + dist[i - 1];
    }
    cout << ans;
}

第四道:

生活大爆炸版石头剪子布

嗯看过 生活大爆炸吗》 就是 sheldon和raj玩的那个有蜥蜴人和 斯波克的这里写图片描述

打个表然后唯一需要注意的就是 %意义显得结果是不可能 到 n的
还有会有0 所以 调整一下 0-n-1 就好
代码 不找了。。。
第五道:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值