第一道:
火柴排队,总算是 把他写过了
我来告诉你我错哪了?
明明一个区间人家是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 就好
代码 不找了。。。
第五道: