4.3w+
社区成员
第一题,原本是暴力的,~~偶然看到可以dp~~
#include <bits/stdc++.h>
#define mpr make_pair
#define pb push_back
#define fi first
#define se second
#define endl '\n'
using namespace std;
typedef long long ll;
typedef pair<int,int> PII;
const int INF = 0x3f3f3f3f;
const int N = 20190324+10;
int dp[N];
void solve(){
dp[1] = dp[2] = dp[3] = 1;
for(int i = 4;i <= 20190324;i++)
{
dp[i] = (dp[i-1] + dp[i-2] + dp[i-3]) % 10000;
}
cout << dp[20190324];
}
void run()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
}
int main() {
run();
int t;
t = 1;
while(t--) {
solve();
}
return 0;
}
、
第二题可以复习一个线性筛
#include <bits/stdc++.h>
#define mpr make_pair
#define pb push_back
#define fi first
#define se second
#define endl '\n'
using namespace std;
typedef long long ll;
typedef pair<int,int> PII;
const int INF = 0x3f3f3f3f;
const int N = 1e8 + 10;
int primes[N];
int st[N];
int cnt,res;//统计质数的个数
void get_primes(int n)
{
//枚举质数
for(int i = 2;i <= n;i++)
{
if(!st[i]) primes[res++] = i;
//用当前有的质数去筛选质数
for(int j = 0;primes[j] <= n /i;j++)
{
//标记当前质数的倍数
st[primes[j] * i] = true;
if(i % primes[j] == 0) break;
}
}
}
void solve(){
get_primes(N);
cout << res << endl;
// for(int i = 0;i < res;i++)
// {
// cout << primes[i] << endl;
// }
cout << primes[2018];
}
void run()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
}
int main() {
run();
int t;
t = 1;
while(t--) {
solve();
}
return 0;
}
第三题属于模拟,~~好像abc的某次比赛题 ~~,注意题目问的是能够获得的饮料数量
#include <bits/stdc++.h>
#define mpr make_pair
#define pb push_back
#define fi first
#define se second
#define endl '\n'
using namespace std;
typedef long long ll;
typedef pair<int,int> PII;
const int INF = 0x3f3f3f3f;
const int N = 1e5 + 10;
int n,ans;
void solve(){
cin >> n;
int back = n;
while(n)
{
if(n < 3)
{
cout << ans + back << endl;
return;
}
else
{
n -= 3;//喝掉三瓶
//兑换一瓶
ans ++;
n += 1;//总共拥有的饮料+1
}
}
}
void run()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
}
int main() {
run();
int t;
t = 1;
while(t--) {
solve();
}
return 0;
}
周末快乐~~