有點事,先貼代碼,題解回來再寫。。
題目描述
小B準備出模擬賽。
她把題目按難度分爲四等,分值分別爲6,7,8,9。
已知小B共出了m道題,共n分。
求小B最少出了多少道6分題。
輸入描述:
兩個正整數n,m
輸出描述:
一個數,表示答案。 若無解,輸出"jgzjgzjgz"。
示例1
輸入
34 5
輸出
1
示例2
輸入
32 5
輸出
3
示例3
輸入
5 1
輸出
jgzjgzjgz
備註:
n,m≤1012
#include<bits/stdc++.h>
#define exp 1e-8
#define mian main
#define pii pair<int,int>
#define pll pair<ll,ll>
#define ll long long
#define pb push_back
#define PI acos(-1.0)
#define inf 0x3f3f3f3f
#define w(x) while(x--)
#define int_max 2147483647
#define lowbit(x) (x)&(-x)
#define gcd(a,b) __gcd(a,b)
#define pq(x) priority_queue<x>
#define ull unsigned long long
#define sc(x) scanf("%d",&x)
#define scl(x) scanf("%lld",&x)
#define pl(a,n) next_permutation(a,a+n)
#define ios ios::sync_with_stdio(false)
#define met(a,x) memset((a),(x),sizeof((a)))
using namespace std;
ll n,m;
int main()
{
while(~scanf("%lld%lld",&n,&m)){
if(n<6*m||n>9*m){
printf("jgzjgzjgz\n");
return 0;
}
if(n/m>=7){
printf("0\n");
return 0;
}
ll p=n/m;
ll ans=n-p*m;
printf("%lld\n",m-ans);
}
}
題目描述
小j開始打工,準備賺錢買煤氣竈。
第一天,小j的工資爲n元,之後每天他的工資都比前一天多d元。
已知煤氣竈需要m元,求小j最少工作幾天才能買到煤氣竈。
輸入描述:
四個整數 n,m,d,x 分別表示小j第一天的工資,煤氣竈的價格,工資每天的增長量,答案不超過x
輸出描述:
一個數表示答案
示例1
輸入
10 100 20 100
輸出
4
說明
10+30+50+70>=100
備註:
0≤n,d≤109,n+d>00≤n,d≤109,n+d>0 1≤m≤10181≤m≤1018 1≤x≤109
#include<bits/stdc++.h>
#define exp 1e-8
#define mian main
#define pii pair<int,int>
#define pll pair<ll,ll>
#define ll long long
#define pb push_back
#define PI acos(-1.0)
#define inf 0x3f3f3f3f
#define w(x) while(x--)
#define int_max 2147483647
#define lowbit(x) (x)&(-x)
#define gcd(a,b) __gcd(a,b)
#define pq(x) priority_queue<x>
#define ull unsigned long long
#define sc(x) scanf("%d",&x)
#define scl(x) scanf("%lld",&x)
#define pl(a,n) next_permutation(a,a+n)
#define ios ios::sync_with_stdio(false)
#define met(a,x) memset((a),(x),sizeof((a)))
using namespace std;
ll n,d,m;
int main()
{
int x;
while(~scanf("%lld%lld%lld%d",&n,&m,&d,&x)){
if(n>=m){
printf("1\n");
return 0;
}
ll ans=n,t=1;
while(ans<m){
n=n+d;
ans+=n;
t++;
}
printf("%lld\n",t);
}
}
題目描述
小B想給她的新項鍊染色。
現在有m種顏色,對於第i種顏色,小B有a_i單位的顏料,每單位顏料可以染項鍊的一個珠子;
同時,小B對於第i種顏色的喜愛度爲b_i。
已知項鍊有n個珠子,求染色後每個珠子的顏色的喜愛度之和的最大值。
(每個珠子只能至多被染一次,不被染色則喜愛度爲0)
輸入描述:
第一行兩個數n,m 第二行m個數a_i 第三行m個數b_i
輸出描述:
一個數表示答案
示例1
輸入
5 3 1 2 3 3 2 1
輸出
9
示例2
輸入
5 3 1 2 1 3 2 1
輸出
8
備註:
1≤n,m≤105,0≤ai,bi≤1061≤n,m≤105,0≤ai,bi≤106
#include<bits/stdc++.h>
#define exp 1e-8
#define mian main
#define pii pair<int,int>
#define pll pair<ll,ll>
#define ll long long
#define pb push_back
#define PI acos(-1.0)
#define inf 0x3f3f3f3f
#define w(x) while(x--)
#define int_max 2147483647
#define lowbit(x) (x)&(-x)
#define gcd(a,b) __gcd(a,b)
#define pq(x) priority_queue<x>
#define ull unsigned long long
#define sc(x) scanf("%d",&x)
#define scl(x) scanf("%lld",&x)
#define pl(a,n) next_permutation(a,a+n)
#define ios ios::sync_with_stdio(false)
#define met(a,x) memset((a),(x),sizeof((a)))
using namespace std;
const int N=1e5+10;
ll n,m;
struct node
{
ll a;
ll b;
}p[N];
bool cmp(node x,node y)
{
return x.b>y.b;
}
int main()
{
while(~scanf("%lld%lld",&n,&m)){
for(int i=1;i<=m;i++)
scanf("%lld",&p[i].a);
for(int i=1;i<=m;i++)
scanf("%lld",&p[i].b);
sort(p+1,p+1+m,cmp);
int t=1;
ll ans=0;
while(n>0){
if(n>=p[t].a){
n-=p[t].a;
ans+=p[t].a*p[t].b;
}
else {
ans+=p[t].b*n;
n-=p[t].a;
}
t++;
if(t>m)
break;
}
printf("%lld\n",ans);
}
}
題目描述
小B喜歡美食。
現在有n個美食排成一排擺在小B的面前,依次編號爲1..n,編號爲i的食物大小爲 a[i] ,即足夠小B吃 a[i] 口。
小B每次會吃兩口,這兩口要麼是編號相同的美食,要麼是編號之差的絕對值爲1的美食。
小B想知道,她最多能吃幾次?
輸入描述:
第1行一個正整數n,表示美食個數 接下來n行,第i行一個整數a[i],表示編號爲i的美食的大小
輸出描述:
一個數表示小B最多吃幾次。
示例1
輸入
4 1 5 7 8
輸出
10
說明
用二元組(a,b)表示某一次吃的兩個美食分別爲第a個美食和第b個美食,則下面爲一個吃10次的方案: (1,2)(2,2)(2,2)(3,4)(3,4)(3,4)(3,4)(3,4)(3,4)(3,4) 注意不一定要吃完。
備註:
#include<bits/stdc++.h>
#define exp 1e-8
#define mian main
#define pii pair<int,int>
#define pll pair<ll,ll>
#define ll long long
#define pb push_back
#define PI acos(-1.0)
#define inf 0x3f3f3f3f
#define w(x) while(x--)
#define int_max 2147483647
#define lowbit(x) (x)&(-x)
#define gcd(a,b) __gcd(a,b)
#define pq(x) priority_queue<x>
#define ull unsigned long long
#define sc(x) scanf("%d",&x)
#define scl(x) scanf("%lld",&x)
#define pl(a,n) next_permutation(a,a+n)
#define ios ios::sync_with_stdio(false)
#define met(a,x) memset((a),(x),sizeof((a)))
using namespace std;
const int N=1e5+10;
int n,a[N];
ll ans;
int main()
{
while(~scanf("%d",&n)){
met(a,0);
ans=0;
for(int i=1;i<=n;i++)
sc(a[i]);
for(int i=1;i<=n;i++){
if(a[i]==0)
continue;
if(a[i]%2==0)
ans+=a[i]/2;
else {
if(a[i+1]==0){
ans+=a[i]/2;
continue;
}
ans+=a[i]/2+1;
a[i+1]--;
}
}
printf("%lld\n",ans);
}
}
題目描述
求a|(a+1)|(a+2)|...|(b-1)|b。
其中|表示[按位或](https://baike.baidu.com/item/%E6%8C%89%E4%BD%8D%E6%88%96)。
輸入描述:
多組輸入,每行兩個數表示a和b
輸出描述:
對於每組輸入,輸出一個數a|(a+1)|(a+2)|...|(b-1)|b。
示例1
輸入
99 109 68 77 55 66 34 43 1111234 1114321
輸出
111 79 127 47 1179647
備註:
輸入不超過10000行,0≤a,b≤10180≤a,b≤1018,a≤b
#include<bits/stdc++.h>
#define exp 1e-8
#define mian main
#define pii pair<int,int>
#define pll pair<ll,ll>
#define ll long long
#define pb push_back
#define PI acos(-1.0)
#define inf 0x3f3f3f3f
#define w(x) while(x--)
#define int_max 2147483647
#define lowbit(x) (x)&(-x)
#define gcd(a,b) __gcd(a,b)
#define pq(x) priority_queue<x>
#define ull unsigned long long
#define sc(x) scanf("%d",&x)
#define scl(x) scanf("%lld",&x)
#define pl(a,n) next_permutation(a,a+n)
#define ios ios::sync_with_stdio(false)
#define met(a,x) memset((a),(x),sizeof((a)))
using namespace std;
map<ll,ll>mp;
ll a,b;
ll ans;
void solve(ll x)
{
while(x>0){
if(mp[lowbit(x)]==0){
mp[lowbit(x)]++;
ans+=lowbit(x);
}
x-=lowbit(x);
}
}
int main()
{
while(~scanf("%lld%lld",&a,&b)){
ans=0;
mp.clear();
for(ll i=b;i>=a;i--)
solve(i);
printf("%lld\n",ans);
}
}
題目描述
bleaves 最近在 wzoi 上面做題。
wzoi 的題目有兩種,一種是 noip 題,一種是省選題。
bleaves 的做題方式很特別。每一天,她可能會看一道題目,這時她會選擇題目種類,然後 wzoi 會在選定種類中隨機扔給她一道她還沒看過的題,她會把這道題看一遍,然後存在腦子裏慢慢思考;她也有可能寫題,這時她一定會寫沒寫過的題中看的時間最遲的一題(如果不存在沒寫過的且沒看過的題,她就不能寫題)。
wzoi 每天會有一個推薦的題目種類,
如果 bleaves 看一道題目:如果種類和推薦的相同,那麼這道題目最大得分爲10,否則爲5
如果 bleaves 寫一道題目:如果種類和推薦的相同,那麼這道題目得分爲最大得分,否則爲最大得分-5
假如 bleaves 現在還沒看過任何一題,並且她知道了 wzoi 接下來一些天每天推薦的種類,問她在這些天的最大得分。
輸入描述:
一行一個01串 s ,|s| 表示天數,si=0si=0 表示 wzoi 第 i 天推薦 noip 題, si=1si=1 表示 wzoi 第 i 天推薦省選題。
輸出描述:
一行一個整數最大得分。
示例1
輸入
0011
輸出
20
說明
4天行動依次爲:看一道 noip 題,寫第1天看的題,看一道省選題,寫第3天看的題。
示例2
輸入
0101
輸出
10
說明
4天行動依次爲:看一道 noip 題,寫第1天看的題,看一道noip題,寫第3天看的題。
示例3
輸入
0110
輸出
20
說明
4天行動依次爲:看一道 noip 題,看一道省選題,寫第2天看的題,寫第1天看的題。
備註:
全部的輸入數據滿足:1≤n≤1061≤n≤106 , n 爲偶數。
#include<bits/stdc++.h>
#define exp 1e-8
#define mian main
#define pii pair<int,int>
#define pll pair<ll,ll>
#define ll long long
#define pb push_back
#define PI acos(-1.0)
#define inf 0x3f3f3f3f
#define w(x) while(x--)
#define int_max 2147483647
#define lowbit(x) (x)&(-x)
#define gcd(a,b) __gcd(a,b)
#define pq(x) priority_queue<x>
#define ull unsigned long long
#define sc(x) scanf("%d",&x)
#define scl(x) scanf("%lld",&x)
#define pl(a,n) next_permutation(a,a+n)
#define ios ios::sync_with_stdio(false)
#define met(a,x) memset((a),(x),sizeof((a)))
using namespace std;
const int N=1e6+10;
char s[N],t[N];
int ans;
int main()
{
while(~scanf("%s",s)){
int len=strlen(s);
int tmp=0;
ans=0;
met(t,0);
for(int i=0;i<len;i++){
if(t[tmp]==s[i]&&tmp>0){
ans+=10;
tmp--;
continue;
}
t[++tmp]=s[i];
}
ans+=tmp/2*5;
printf("%d\n",ans);
}
}
題目描述
你在一個 n 行 m 列的網格迷宮中,迷宮的每一格要麼爲空,要麼有一個障礙。
你當前在第 r 行第 c 列(保證該格子爲空)。每次移動你可以向上下左右任意一個方向移動一格,前提是不能走到障礙上,也不能超出迷宮的邊界。
你向左移動的次數不能超過 x 次,向右不能超過 y 次。
問在這種情況下,對於每個格子,是否存在一種移動方案讓你走到它。
輸出有多少個格子存在移動方案讓你走到它。
輸入描述:
第一行兩個正整數 n,m 。 第二行兩個正整數 r,c ,保證 1≤r≤n1≤r≤n ,1≤c≤m1≤c≤m 。 第三行兩個整數 x,y ,保證 0≤x,y≤1090≤x,y≤109 。 接下來 n 行,每行一個長度爲 m 的字符串, 第 i 行第 j 個字符表示迷宮第 i 行第 j 列的格子, 字符爲`.` 表示格子爲空,字符爲`*` 表示格子上有一個障礙。
輸出描述:
輸出一個數,表示有多少個格子存在移動方案讓你走到它。
示例1
輸入
4 5 3 2 1 2 ..... .***. ...** *....
輸出
10
說明
將能走到的格子用+標記: +++.. +***. +++** *+++.
示例2
輸入
4 4 2 2 0 1 .... ..*. .... ....
輸出
7
說明
.++. .+*. .++. .++.
備註:
對於全部數據, 1≤n,m≤10001≤n,m≤1000 。
#include<bits/stdc++.h>
#define exp 1e-8
#define mian main
#define pii pair<int,int>
#define pll pair<ll,ll>
#define ll long long
#define pb push_back
#define PI acos(-1.0)
#define inf 0x3f3f3f3f
#define w(x) while(x--)
#define int_max 2147483647
#define lowbit(x) (x)&(-x)
#define gcd(a,b) __gcd(a,b)
#define pq(x) priority_queue<x>
#define ull unsigned long long
#define sc(x) scanf("%d",&x)
#define scl(x) scanf("%lld",&x)
#define pl(a,n) next_permutation(a,a+n)
#define ios ios::sync_with_stdio(false)
#define met(a,x) memset((a),(x),sizeof((a)))
using namespace std;
int n,m,q,e,r,c,ans;
char a[1010][1010];
bool vis[1010][1010];
struct node
{
int x,y,q,e;
node(int x1,int y1,int q1,int e1) : x(x1),y(y1),q(q1),e(e1){}
};
queue<node>qu;
int main()
{
while(~scanf("%d%d%d%d%d%d",&n,&m,&r,&c,&q,&e)){
for(int i=1;i<=n;i++){
char p=getchar();
for(int j=1;j<=m;j++)
scanf("%c",&a[i][j]);
}
qu.push(node(r,c,q,e));
ans=0;
met(vis,0);
while(!qu.empty()){
node no=qu.front();
qu.pop();
if(vis[no.x][no.y]||a[no.x][no.y]=='*')
continue;
ans++;
vis[no.x][no.y]=1;
if(no.x<n)
qu.push(node(no.x+1,no.y,no.q,no.e));
if(no.x>1)
qu.push(node(no.x-1,no.y,no.q,no.e));
if(no.y>1&&no.q>0)
qu.push(node(no.x,no.y-1,no.q-1,no.e));
if(no.y<m&&no.e>0)
qu.push(node(no.x,no.y+1,no.q,no.e-1));
}
printf("%d\n",ans);
}
}