A
算给定月份的第一天是星期几, 让你算这个月有多少列
#include <cstdio>
#include <cmath>
#include <cstring>
#include <cctype>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <sstream>
#include <queue>
#include <stack>
#include <string>
#include <map>
#include <set>
#include <utility>
#include <vector>
using namespace std;
typedef long long ll;
const int qq = 1e5 + 10;
int n, m, k;
int num[qq];
int vis[10][10];
int main(){
memset(vis, 0, sizeof(vis));
scanf("%d%d", &n, &k);
int cnt = 1;
if(n == 2){
int c = 28;
c = c - (8 - k);
cnt += c / 7;
if(c % 7 != 0) cnt++;
}else if(n == 1 || n == 3 || n == 5 || n == 7 || n == 8 || n == 10 || n == 12){
int c = 31;
c = c - (8 - k);
cnt += c / 7;
if(c % 7 != 0) cnt++;
}else{
int c = 30;
c = c - (8 - k);
cnt += c / 7;
if(c % 7 != 0) cnt++;
}
printf("%d\n", cnt);
return 0;
}
B
题意:n个人, n个床, m个枕头, master在第k张床, master想要更多的枕头, 但是要保证相邻两个人的枕头数量的差的绝对值要小于等于1, 求master能获得的最大枕头数
思路: 每个人至少又一个枕头, 这是题意中保证了的, 那么当mater每增加一个枕头的时候, 要保证左右两边的绝对值小于1, 然后一直迭代下去.
#include <cstdio>
#include <cmath>
#include <cstring>
#include <cctype>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <sstream>
#include <queue>
#include <stack>
#include <string>
#include <map>
#include <set>
#include <utility>
#include <vector>
using namespace std;
typedef long long ll;
const int qq = 1e5 + 10;
int n, m, k;
int num[qq];
int main(){
scanf("%d%d%d", &n, &m, &k);
int res = 1;
m = m - n;
int l, r;
l = r = k;
if(m){
m--;
res++;
}
if(r + 1 <= n) r = r + 1;
if(l - 1 >= 1) l = l - 1;
while(m > 0){
if(m >= (r - l + 1)){
m = m - (r - l + 1);
if(r + 1 <= n) r = r + 1;
if(l - 1 >= 1) l = l - 1;
res++;
}else{
break;
}
if(r == n && l == 1) break;
}
res += m / (r - l + 1);
printf("%d\n", res);
return 0;
}