如何做彩票网站的教程,个人网页设计内容,小程序源码提取工具,wordpress动漫主题曲A. Yogurt Sale
题意#xff1a;要购买n个酸奶#xff0c;有两种买法#xff0c;一种是一次买一个#xff0c;价格a。一种是一次买两个#xff0c;价格b#xff0c;问买n个酸奶的最小价格。
题解#xff1a;很容易想到用2a和b比较#xff0c;判断输出即可。
代码要购买n个酸奶有两种买法一种是一次买一个价格a。一种是一次买两个价格b问买n个酸奶的最小价格。
题解很容易想到用2a和b比较判断输出即可。
代码
#includebits/stdc.h
using namespace std ;
typedef long long ll ;
const int maxn 4e5 7 ;
inline ll read(){ll x 0 , f 1 ;char c getchar() ;while(c 9 || c 0){if(c -)f -1 ;c getchar() ;}while(c 0 c 9){x x * 10 c - 0 ;c getchar() ;}return x * f ;
}
ll t , n , k , c , a[maxn] ;
ll head[maxn] , nxt[maxn] , ver[maxn] , cnt , ans ;void solve(){n read() ;k read() ;c read() ;if(k * 2 c){cout n * k endl ;return ;}else{cout (n / 2) * c (n - (n / 2) * 2) * k endl ;}
}int main(){t read() ;while(t --){solve() ;}return 0 ;
}B. Progressive Square
题意给你ncd你要生成n*n的矩阵按照规则。给你n*n个数字看看能否生成这样的矩阵并且包含所有数字。
题解用最小数字开始枚举即可n范围在500轻松通过。
代码
#includebits/stdc.h
using namespace std ;
typedef long long ll ;
const int maxn 1e6 7 ;
inline ll read(){ll x 0 , f 1 ;char c getchar() ;while(c 9 || c 0){if(c -)f -1 ;c getchar() ;}while(c 0 c 9){x x * 10 c - 0 ;c getchar() ;}return x * f ;
}
ll t , n , k , c , a[maxn] ;
ll head[maxn] , nxt[maxn] , ver[maxn] , cnt , ans ;
ll b[550][550] ;
vector ll q ;
void solve(){q.clear() ;n read() ;k read() ;c read() ;for(int i 1 ; i n * n ; i ){a[i] read() ;}sort(a 1 , a n * n 1) ;ll rt a[1] ;b[1][1] rt ;for(int i 2 ; i n ; i ){b[1][i] b[1][i - 1] c ;}for(int i 2 ; i n ; i ){for(int j 1 ; j n ; j ){b[i][j] b[i - 1][j] k ;}}for(int i 1 ; i n ; i ){for(int j 1 ; j n ; j ){q.push_back(b[i][j]) ;}}sort(q.begin() , q.end()) ;ll Rt 0 ;for(int i 1 ; i n * n ; i ){if(q[Rt] ! a[i]){cout NO\n ;return ;}Rt ;}cout YES endl ;
}int main(){t read() ;while(t --){solve() ;}return 0 ;
}C. Inhabitant of the Deep Sea
题意 给你n个数字和k每次怪兽都会按照攻击前面一次再攻击后面一次的顺序攻击每次造成1滴血量伤害问最多能击败多少个船。
题解可以将k分解成两部分然后枚举统计答案即可。
代码
#includebits/stdc.h
using namespace std ;
typedef long long ll ;
const int maxn 1e6 7 ;
inline ll read(){ll x 0 , f 1 ;char c getchar() ;while(c 9 || c 0){if(c -)f -1 ;c getchar() ;}while(c 0 c 9){x x * 10 c - 0 ;c getchar() ;}return x * f ;
}
ll t , n , k , c , a[maxn] ;
ll head[maxn] , nxt[maxn] , ver[maxn] , cnt , ans ;
vector ll q ;
void solve(){n read() ;k read() ;for(int i 1 ; i n ; i ){a[i] read() ;}ll l (k 2 - 1) / 2 ;ll r k / 2 ;ll rt 1 ;ll ans 0 ;while(l ! 0){if(rt n){break ;}if(l - a[rt] 0){l - a[rt] ;ans ;a[rt] 0 ;rt ;}else{a[rt] - l ;l 0 ;break ;}}rt n ;while(r ! 0){if(rt 1){break ;}if(a[rt] 0){break ;}if(r - a[rt] 0){r - a[rt] ;ans ;a[rt] 0 ;rt -- ;}else{a[rt] - r ;r 0 ;break ;}}cout ans endl ;
}int main(){t read() ;while(t --){solve() ;}return 0 ;
}D. Inaccurate Subsequence Search
题意给你一个数组a和数组b长度分别为n和m看看有多少组可以满足满足至少有k个相同的数字
题解可以用STL里的map来统计数组b然后先用map统计1-m的数字有多少相同的定义然后每次让lr统计有多少个相同数字直接统计答案即可。
代码
#includebits/stdc.h
using namespace std ;
typedef long long ll ;
const int maxn 1e6 7 ;
inline ll read(){ll x 0 , f 1 ;char c getchar() ;while(c 9 || c 0){if(c -)f -1 ;c getchar() ;}while(c 0 c 9){x x * 10 c - 0 ;c getchar() ;}return x * f ;
}
ll t , n , k , c , a[maxn] , b[maxn] ;
ll head[maxn] , nxt[maxn] , ver[maxn] , cnt , ans ;
vector ll q ;
void solve(){map ll , ll mp , p ;n read() ;k read() ;c read() ;for(int i 1 ; i n ; i ){a[i] read() ;}for(int i 1 ; i k ; i ){b[i] read() ;mp[b[i]] ;}ll sum 0 , ans 0 ;for(int i 1 ; i k ; i ){p[a[i]] ;if(p[a[i]] mp[a[i]]){sum ;}}if(sum c){ans ;}ll l 1 , r k ;while(1){if(r n){break ;}if(p[a[l]] - 1 mp[a[l]]){sum -- ;p[a[l]] -- ;}else{p[a[l]] -- ;}if(p[a[r 1]] 1 mp[a[r 1]]){sum ;p[a[r 1]] ;}else{p[a[r 1]] ;}if(sum c){ans ;}l ;r ;}cout ans endl ;
}int main(){t read() ;while(t --){solve() ;}return 0 ;
}E. Long Inversions
题意给你一个字符串s可以选择一个k每次修改翻转里面所有的数字将0变成1将1变成0目标是想要将序列全部变成1,。问能满足最大的k是多少。
题解看到最大的k先想到了二分能否从小推大但是发现不行那么看到数据那么可以想到枚举即可可以通过首先思考怎么看能否能将所有的数字变成1很明显从前面到后面依次遍历如果碰到了0那么就翻转当前位置i到i k - 1。那么现在的复杂度是很明显通过不了。那么就想到了数据结构那么就想到用树状数组来维护。如果说当前为0那么就让加1如果说等于0那么就区间增加1如果说等于1那么就不修改最后遍历一遍看看是否全为1即可。复杂度。
代码
#includebits/stdc.h
#define ll long long
const int maxn 5000 7 ;
using namespace std;
ll t , n , m , p , l , r , a[maxn] , tree[maxn] ;
char s[maxn];
inline ll read(){ll x 0 , f 1 ;char c getchar() ;while(c 9 || c 0){if(c -)f -1 ;c getchar() ;}while(c 0 c 9){x x * 10 c - 0 ;c getchar() ;}return x * f ;
}
ll lowbit(ll x){return x (-x) ;
}
void update(ll x , ll y){for( ;x n ; x lowbit(x)){tree[x] y ;}
}
ll Query(ll x){ll ans 0 ;while(x ! 0){ans tree[x] ;x - lowbit(x) ;}return ans ;
}
void solve(){n read() ;scanf(%s , s 1) ;for(int i 1 ; i n ; i ) a[i] s[i] - 0 ;for(int i n ; i 1 ; i --){for(int j 0 ; j n ; j ){tree[j] 0 ;}bool f 0 ;for(int j 1 ; j i - 1 n ; j ){ll res (a[j] (Query(j) % 2)) % 2 ;if(res 0){update(j , 1) ;update(j i , -1) ;}}for(int j 1 ; j n ; j ){ll res (a[j] (Query(j) % 2)) % 2 ;if(res 0){f 1 ;}}if(f 0){cout i endl ;return ;}}cout 1 endl ;
}
int main()
{t read() ;while(t --){solve() ;}return 0;
}
注也不知道为什么我一开始用线段树写T了5发也不知道是我常熟大吗 F. Unfair Game
题意给你四个数字分别代表1,2,3,4的数量Alice和Bob在进行游戏如果说所有的数字异或和不为0那么Alice赢如果说是0那么Bob赢Eve每次会去掉一个数字每次都用最优的方式去掉数字问最多Bob能获胜多少次。
题解这个题其实很好想首先可以想到4只要有那么就一定和12,3没有任何关系因为无法组成0那么就将4的数量单独拿出来看再看12,3的数量可以想到1和2可以和3抵消掉然后就可以想出一种方法就是将1,2,3的数量取min然后加上4的数量除以2是一种情况再看如果说每个的数字是偶数的话那么很明显比1,2,3抵消要更优因为每个数字是偶数如果说是第一种情况最多是2但是第二种情况每次减2的话答案可以增加3。最后就是特殊的情况比如1,23的数量一样并且全是奇数那么答案要加1。如果说三个数字都是奇数那么答案也要加1。这个题就迎刃而解了。复杂度非常低
代码
#includebits/stdc.h
#define ll long long
const int maxn 5000 7 ;
using namespace std;
ll t , n , m , p , l , r , tree[maxn] ;
char s[maxn];
inline ll read(){ll x 0 , f 1 ;char c getchar() ;while(c 9 || c 0){if(c -)f -1 ;c getchar() ;}while(c 0 c 9){x x * 10 c - 0 ;c getchar() ;}return x * f ;
}
ll a , b , c , d ;
void solve(){a read() ;b read() ;c read() ;d read() ;bool f 0 ;if((a b b c a % 2 1) || ((a % 2 1) (b % 2 1) (c % 2 1))){f 1 ;}ll res (min(min(a , b) , c) d / 2) ;ll Res (a / 2) (b / 2) (c / 2) (d / 2) ((f 1) ? 1 : 0) ;cout max(res , Res) endl ;
}
int main()
{t read() ;while(t --){solve() ;}return 0;
}
喜欢作者的记得点赞收藏加关注哦~