はい。
AtCoder Beginner Contest 121
A - White Cells
#include<bits/stdc++.h>
using namespace std;
#define sc2(a,b) scanf("%d %d",&a,&b)
int main(){
int a,b,c,d;
sc2(a,b);
sc2(c,d);
printf("%d\n",(a-c)*(b-d));
return 0;
}
塗りつぶした行と列は数えない数えないマスなのでそれを引いて掛け算で。
B - Can you solve this?
#include<bits/stdc++.h>
using namespace std;
#define rep(i,n) for(int i=0;i<n;++i)
#define sc1(a) scanf("%d",&a)
#define sc3(a,b,c) scanf("%d %d %d",&a,&b,&c)
int a,b[105];
int main(){
int mod=1000000007;
int n,m,c,t=0,ans=0;
sc3(n,m,c);
rep(i,m) sc1(b[i]);
rep(i,n) {
t=0;
rep(j,m) {
sc1(a);
t+=a*b[j];
}
ans+=(t+c)>0;
}
printf("%d\n",ans);
return 0;
}
それぞれの行を計算して+Cして0より大きいか確認して大きければ件数をカウントしました。入力受け取りながら計算しても後からでもTLEとかには影響しないと思います。。
C - Energy Drink Collector
#include<bits/stdc++.h>
using namespace std;
#define rep(i,n) for(int i=0;i<n;++i)
#define per(i,n) for(int i=n-1;i>=0;--i)
#define sc2(a,b) scanf("%d %d",&a,&b)
#define sl2(a,b) scanf("%lld %lld",&a,&b)
vector <pair<long long,long long>> a(100005);
int main(){
long long n,m;
long long ans=0ll;
sl2(n,m);
rep(i,n) {
scanf("%lld %lld",&a[i].first,&a[i].second);
a[i].first*=-1ll;
}
sort(a.begin(),a.end());
for (int i=n-1;i>-1;i--) {
ans+=(min(m,a[i].second)*(a[i].first*-1))*1ll;
m-=a[i].second;
if (m<=0) break;
}
printf("%lld\n",ans);
return 0;
}
vector <pair<long long, long long>>
使うのやや不安だったんですが使えてよかったです。大きめに確保しています。安いドリンクを優先のためにsortすると 0,0 が邪魔でした。負の数にしてM番目からみるようにしました。安いドリンク優先で解になると思います。
D - XOR World
a,b=map(int,input().split())
w=[0]*50
p,q=[0]*50,[0]*50
ans=0
t=1
for i in range(50):
x=(b+1)//(t*2)
q[i]=t*x
if (b+1)%(t*2)>t: q[i]+=(b+1)%(t*2)-t
t*=2
if t>b: break
t=1
for i in range(50):
x=a//(t*2)
p[i]=t*x
if a%(t*2)>t: p[i]+=a%(t*2)-t
t*=2
if t>a-1: break
t=1
for i in range(50):
ans+=abs(p[i]-q[i])%2*t
t*=2
print(ans)
それぞれの桁で1が立つのが周期性があるのでBとA-1のものをそれぞれ数えます。差分が1の立っている個数です。個数の偶数奇数がXORのそれです。