QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#271343 | #7744. Elevator | iorit# | WA | 22ms | 14540kb | C++14 | 3.4kb | 2023-12-02 10:46:34 | 2023-12-02 10:46:34 |
Judging History
answer
//#pragma GCC target("avx,avx2")
//#pragma GCC optimize("Ofast")
#include<bits/stdc++.h>
#define int long long
#define mem(x,y)memset(x,y,sizeof(x))
#define rep(i,l,r)for(int i = l;i <= r;i ++)
#define dep(i,r,l)for(int i = r;i >= l;i --)
#define tov(i)for(int i = head[x];i;i = e[i].nxt)
#define pb push_back
#define pi pair <int,int>
using namespace std;
int read(){
int s = 0,w = 1;
char ch = getchar();
while(ch < '0' || ch > '9'){if(ch == '-')w = -1;ch = getchar();}
while(ch >= '0' && ch <= '9')s = s * 10 + ch - '0',ch = getchar();
return s * w;
}
namespace Tem{
const int mod = 0;//Notice Here!!!!!!!!!!
int fac[1000010],ifac[1000010];
inline int gcd(int a, int b){
int az = __builtin_ctz(a);
int bz = __builtin_ctz(b);
int z = az > bz ? bz : az;
int diff;
b >>= bz;
while(a){
a >>= az;
diff = b - a;
az = __builtin_ctz(diff);
if(a < b)b = a;
a = diff < 0 ? -diff : diff;
}
return b << z;
}
inline int poww(int x,int y,int MOD = mod){
int s = 1;
for(;y;x = x * x % MOD,y >>= 1)if(y & 1)s = s * x % MOD;
return s;
}
void initfac(int n,int MOD = mod){
fac[0] = fac[1] = ifac[0] = ifac[1] = 1;
rep(i,2,n)fac[i] = fac[i - 1] * i % MOD;
ifac[n] = poww(fac[n],MOD - 2,MOD);
dep(i,n - 1,2)ifac[i] = ifac[i + 1] * (i + 1)% MOD;
}
inline int inv(int x,int MOD = mod){return poww(x,MOD - 2)% MOD;}
inline int C(int x,int y,int MOD = mod){return fac[x] * ifac[y] % MOD * ifac[x - y] % MOD;}
void Add(int &x,int y){x = x + y >= mod ? x + y - mod : x + y;}
void Dec(int &x,int y){x = x - y < 0 ? x - y + mod : x - y;}
void Mul(int &x,int y){x = x * y % mod;}
}using namespace Tem;
struct node{
int c;
int w;
int f;
}e[1000010],e1[1000010];
int t;
int n,m;
bool bk[1000010];
int nxt[1000010];
int ans;
int d[1000010];
bool cmp(node x,node y){if(x.f != y.f)return x.f > y.f;return x.w > y.w;}
void solve(){
n = read(),m = read();
int cnt = 0;
rep(i,1,n)e[i].c = read(),e[i].w = read(),e[i].f = read();
rep(i,1,n - 1){
if(e[i].f == e[i + 1].f){
int v = e[i].c * e[i].w;
if(e[i + 1].w == 1)e[i + 1].c += v;
else e[i + 1].c += v / 2;
e[i].c = 0;
}
}
rep(i,1,n)bk[i] = d[i] = 0;
ans = 0;
sort(e + 1,e + n + 1,cmp);
//rep(i,1,n)cout<<"w = "<<e[i].w<<",f = "<<e[i].f<<endl;
// nxt[n + 1] = n + 1;
// dep(i,n,1){
// if(e[i].w == 2)nxt[i] = nxt[i + 1];
// else nxt[i] = i;
// }
int now;
// rep(i,1,n)cout<<"i = "<<i<<",nxt = "<<nxt[i]<<endl;
rep(i,1,n){
int v = e[i].c * e[i].w - d[i];
//cout<<"i = "<<i<<",v = "<<v<<endl;
if(v <= 0)continue;
int tt = (v - 1) / m + 1;
ans += e[i].f * tt;
now = m - v % m;
if(now > 0){
int pos = i + 1;
while(1){
d[pos] += now;
if(e[pos].c * e[pos].w >= now)break;
now -= e[pos].c * e[pos].w;
pos ++;
if(pos > n)break;
}
}
}
printf("%lld\n",ans);
}
signed main(){
cin>>t;
while(t --)solve();
}
详细
Test #1:
score: 100
Accepted
time: 1ms
memory: 9732kb
input:
2 4 6 1 1 8 7 2 5 1 1 7 3 2 6 8 1200000 100000 1 100000 100000 1 12345 100000 2 100000 100000 2 12345 100000 1 100000 100000 1 12345 100000 2 100000 100000 2 12345
output:
24 100000
result:
ok 2 lines
Test #2:
score: -100
Wrong Answer
time: 22ms
memory: 14540kb
input:
5501 8 104 5 2 3 6 2 4 5 2 3 6 2 9 8 2 4 2 1 3 7 2 4 8 2 8 1 290 3 1 1 12 12 6 1 2 1 2 2 1 1 2 1 2 4 6 1 1 1 2 5 6 1 4 4 1 4 6 2 4 6 2 5 4 2 5 4 1 4 5 334 1 1 4 1 2 3 4 2 1 5 1 1 2 1 2 13 218 5 2 3 5 1 4 1 2 1 1 2 5 3 2 2 1 1 3 4 2 2 1 2 5 2 2 1 2 1 5 3 2 1 5 2 1 1 1 4 10 260 7 2 1 5 1 1 5 2 4 6 1 6...
output:
9 1 23 4 5 7 1 3 9 6 1 10 4 9 17 5 4 1 8 5 5 7 1 3 23 6 3 3 2 2 2 3 8 1 5 6 9 11 121 7 10 2 7 7 8 6 5 5 1 7 3 5 10 7 7 10 8 1 4 2 3 9 1 5 2 9 1 6 7 7 6 10 18 8 10 4 10 9 2 8 3 5 9 3 6 5 3 2 6 1 3 2 2 1 6 9 6 3 4 8 9 9 2 6 1 2 6 7 5 2 5 21 8 1 2 3 4 9 3 4 6 5 9 6 1 7 3 7 3 2 2 8 7 3 5 9 7 10 7 3 2 4 ...
result:
wrong answer 16th lines differ - expected: '6', found: '5'