ccc
模拟4A.多项式输出
思路
模拟
AC代码
void solve(){
int n;
cin >> n;
for(int i = n; i >= 0; i -- ){
int e;
cin >> e;
if(e == 0)continue;
if(e > 0 && i != n)cout << "+";
if(e < 0){
e = - e;
cout << "-";
}
if(e != 1 || i == 0)cout << e;
if(i > 1)cout << "x^" << i;
if(i == 1)cout << "x" ;
}
cout << endl;
}
模拟4B.借教室
思路
二分+差分
80分代码
const int N = 1e6+10, MAX = 1e9, INF = -1e9;
typedef struct name{
int x, y;
int num;
}P;
int n, m;
int a[N];
P b[N];
int c[N];
void solve(){
cin >> n >> m;
for(int i = 1; i <= n ; i ++ ){
cin >> a[i];
}
for(int i = 1; i <= m ; i ++ ){
cin >> b[i].num >> b[i].x >> b[i].y;
for(int j = b[i].x; j <= b[i].y; j ++ ){
a[j] -= b[i].num;
if(a[j] < 0){
cout << -1 << endl;
cout << i << endl;
return ;
}
}
}
cout << 0 << endl;
return ;
}
AC代码
const int N = 1e6+10, MAX = 1e9, INF = -1e9;
typedef struct name{
int x, y;
int num;
}P;
int n, m;
int a[N];
P b[N];
int c[N];
bool check(int mid){
memset(c, 0,sizeof c);
for(int i = 1; i <= mid; i ++ ){
c[b[i].x] += b[i].num;
c[b[i].y + 1] -= b[i].num;
}
for(int i = 1; i <= n ; i ++ ){
c[i] += c[i - 1];
if(c[i] > a[i])return true;
}
return false;
}
void solve(){
cin >> n >> m;
for(int i = 1; i <= n ; i ++ ){
cin >> a[i];
}
for(int i = 1; i <= m ; i ++ ){
cin >> b[i].num >> b[i].x >> b[i].y;
}
if(!check(m)){
cout << 0 << endl;
return ;
}
int l = 1, r = m;
while(l < r){
int mid = (l + r) >> 1;
if(check(mid))r = mid;
else l = mid + 1;
}
cout << -1 << endl;
cout << l << endl;
return ;
}
模拟4D.蚯蚓
思路
模拟
30分代码
bool cmp(int x, int y){
return x > y;
}
void solve(){
int n, m, q, u, v, t;
cin >> n >> m >> q >> u >> v >> t;
vector<int> a;
for(int i = 1; i <= n ; i ++ ){
int e;
cin >> e;
a.pb(e);
}
for(int k = 0; k < m ; k ++ ){
int p;
int top = - 1;
for(int i = 0; i < n + k; i ++ ){
if(top < a[i]){
top = a[i];
p = i;
}
}
for(int i = 0; i < n + k; i ++ ){
if(i != p)a[i] += q;
}
if((k + 1) % t == 0)cout << a[p] << " ";
a.pb((a[p] * u) / v);
a.pb(a[p] - (a[p] * u) / v);
a.erase(a.begin() + p);
}
cout << endl;
sort(a.begin(), a.end(), greater<>());
sort(a.begin(), a.end(), cmp);
for(int i = 0; i < a.size(); i ++ ){
if((i + 1) % t == 0)cout << a[i] << " ";
}
cout << endl;
return ;
}

浙公网安备 33010602011771号