题意:n个客人,每个本子有m张同一颜色的纸;
每一个客人要 红色2张 绿色5张 白色8张;
问最少需要买多少本本子
#include<bits/stdc++.h>
using namespace std;
int main()
{
long long n,m;
long long ans;
cin>>n>>m;
long long aa,ab,ac,d,a,b,c;
a=2*n;b=n*5;c=n*8;
aa=a/m;ab=b/m;ac=c/m;
if(a%m) aa++;
if(c%m) ac++;
if(b%m) ab++;
d=aa+ab+ac;
cout<<d<<"\n";
}
B - Margarite and the best present
题意:T组测试 给区间【L,R】区间累加,其中 奇数为负数 偶数为正数;
#include<bits/stdc++.h>
using namespace std;
int main()
{
long long n,m,t,l,r;
long long ans;
cin>>t;
while(t--)
{
cin>>l>>r;
long a,c;
if(l==r)
{
if(r%2) ans=-r;
else ans=r;
}
else
{
if((r-l+1)%2==0)
{
ans=(r-l+1)/2;
if(r%2) ans=(-ans);
}
else
{
ans=(r-l+1)/2;
if(l%2)
{
ans=-ans;
ans-=l;
}
else ans+=l;
}
}
cout<<ans<<"\n";
}
}
给出 N*M 的棋盘,初始
给出两个矩阵坐标(x1,y1,x2,y2)全部染白色 ,左下 右上 (x3,y3,x4,y4)全部染黑色
输出:白色 黑色的个数
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
long long cum;
ll solve(ll x1,ll x2,ll y1,ll y2)
{
long long l=fabs(y2-y1)+1;
ll r=fabs(x2-x1)+1;cum=l*r;
if((l%2==0)||(r%2==0)) return l*r/2;
if(l%2) {
if((x1+y1)%2) return l*r/2+1;//黑
else return l*r/2;
}
}
int main()
{
ll n,m,t;
cin>>t;
while(t--)
{
ll x1,x2,y1,y2,x3,x4,y3,y4;
cin>>n>>m;
cin>>x1>>y1>>x2>>y2;
ll w,h;
h=w=(n*m/2);
if((n*m)%2) w++;// printf("k1 %d %d\n",w,h);
ll c=solve(x1,x2,y1,y2);//多少黑变成白色
w+=c;h-=c;//printf("k2 %d %d\n",w,h);
cin>>x3>>y3>>x4>>y4;
c=solve(x3,x4,y3,y4);//黑色
c=cum-c;//多少白变成黑色
w-=c;h+=c;//printf("k3 %d %d\n",w,h);
ll x5=max(x1,x3),x6=min(x2,x4);
ll y5=max(y1,y3),y6=min(y2,y4);
if(x5<=x6&&y5<=y6) {
c=solve(x5,x6,y5,y6);//黑色
w-=c ;h+=c;
}
cout<<w<<" "<<h<<"\n";
}
}