入门赛题目比较简单,直接贴代码~~
contest链接:https://www.luogu.com.cn/contest/188303
目录
A题
A要注意的是2016年8月也算一个月,记得加上--
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<set>
#include<map>
#include<vector>
#include<cstring>
#include<unordered_map>
#include<unordered_set>
#define int long long
#define x first
#define y second
using namespace std;
const int N = 1e5 + 10;
void solve()
{
int ans ;
int n,m;
cin >> n >> m;
if(m >= 8) ans = (n - 2016) * 12 + (m - 8) + 1;
else ans = (n - 2016 - 1) * 12 + 5 + m;
cout << ans << endl;
}
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
int t = 1;
while(t--) solve();
return 0;
}
B题
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<set>
#include<map>
#include<vector>
#include<cstring>
#include<unordered_map>
#include<unordered_set>
#define int long long
#define x first
#define y second
using namespace std;
const int N = 1e5 + 10;
void solve()
{
int a,b,c;
int a1,b1,c1;
cin >> a >> b >> c >> a1 >> b1 >> c1;
if(a > a1) cout << "A" << endl;
if(a1 > a) cout << "B" << endl;
if(a == a1 && b > b1) cout << "A" << endl;
if(a == a1 && b1 > b) cout << "B" << endl;
if(a == a1 && b == b1 && c > c1) cout << "A" << endl;
if(a == a1 && b == b1 && c1 > c) cout << "B" << endl;
}
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
int t = 1;
while(t--) solve();
return 0;
}
C题
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<set>
#include<map>
#include<vector>
#include<cstring>
#include<unordered_map>
#include<unordered_set>
#define int long long
#define x first
#define y second
using namespace std;
const int N = 2e5 + 10;
int a[N],b[N];
int sum1 = 0;
int sum2 = 0;
void solve()
{
int n;
cin >> n;
for(int i = 0; i < n; i++)
{
cin >> a[i];
sum1 += a[i];
}
for(int i = 0; i < n; i++)
{
cin >> b[i];
sum2 += b[i];
}
cout << ceil((sum1+sum2)*1.0/2.0) << endl;
}
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
int t = 1;
while(t--) solve();
return 0;
}
D题
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<set>
#include<map>
#include<vector>
#include<cstring>
#include<unordered_map>
#include<unordered_set>
#define int long long
#define x first
#define y second
using namespace std;
const int N = 1e5 + 10;
int flag = 0;
int sum = 0;
void solve()
{
int n,m,a,b;
cin >> n >> m >> a >> b;
while(m--)
{
int k;
cin >> k;
vector<int> arr(k+1);
for(int i = 1; i <= k; i++) cin >> arr[i];
for(int j = 1; j <= k; j++)
{
if(arr[j] == a) flag = 1;
if(flag == 1 && arr[j] == b) flag = 2;
}
if(flag == 2) sum ++;
}
cout << sum << endl;
}
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
int t = 1;
while(t--) solve();
return 0;
}
E题
set记录去重一下
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<set>
#include<map>
#include<vector>
#include<cstring>
#include<unordered_map>
#include<unordered_set>
#define int long long
#define x first
#define y second
using namespace std;
const int N = 1e5 + 10;
set<int> st;
int a[N];
void solve()
{
int n,t;
cin >> n >> t;
for(int i = 1; i <= n; i++) cin >> a[i];
int m = pow(10,t);
for(int i = 1; i <= n; i++) st.insert(a[i] % m);
cout << st.size() << endl;
}
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
int t = 1;
while(t--) solve();
return 0;
}
F题
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<set>
#include<map>
#include<vector>
#include<cstring>
#include<unordered_map>
#include<unordered_set>
#define int long long
#define x first
#define y second
using namespace std;
const int N = 1e3 + 10;
int a[N];
vector<int> b[N];
void solve()
{
int n,m;
cin >> n >> m;
int t = n / m ;
for(int i = 1; i <= n; i++)
{
cin >> a[i];
b[a[i]].push_back(i);
}
for(int i = 1; i <= t; i++)
{
for(int j = 1; j <= m; j++)
{
cout << b[j][i-1] << endl;
}
}
}
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
int t = 1;
while(t--) solve();
return 0;
}
G题
substr找到friend,并把首字母放入vector中,若两个friend中间差了三个字母及以上,就必须操作两次,否则只需操作一次执行两次i++跳过第二个friend~~~
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<set>
#include<map>
#include<vector>
#include<cstring>
#include<unordered_map>
#include<unordered_set>
#define int long long
#define x first
#define y second
using namespace std;
const int N = 1e5 + 10;
vector<int> b;
void solve()
{
string str;
cin >> str;
for(int i = 0; i < str.size() - 5; i++)
{
if(str.substr(i,6) == "friend") b.push_back(i);
}
int ans = 0;
for(int i = 0; i < b.size(); i++)
{
ans ++ ;
if(i < b.size()&&b[i+1] - b[i] < 9) i++;
}
cout << ans << endl;
}
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
int t = 1;
while(t--) solve();
return 0;
}
H题
开个三维vector数组,方便调STL库的erase销毁数据,然后按题意模拟。
三维数组:vector<vector<vector<int>>> g(110,vector<vector<int>>(110,vector<int>()));
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<set>
#include<map>
#include<vector>
#include<cstring>
#include<unordered_map>
#include<unordered_set>
#include<climits>
#define int long long
#define x first
#define y second
using namespace std;
const int N = 1e5 + 10;
const int INF = INT_MAX;
vector<vector<vector<int>>> g(110,vector<vector<int>>(110,vector<int>()));//三维数组
void solve()
{
int n,m,k,t;
cin >> n >> m >> k >> t;
while(t -- )
{
int a,x1,y1;
cin >> a >> x1 >> y1;
if(g[x1][y1].empty()||g[x1][y1].size() < k)
{
g[x1][y1].push_back(a);
cout << "-1" << endl;
}
else
{
int c = INF;
for(int i = k - 1; i >= 0; i--)
{
if(c > g[x1][y1][i]) c = g[x1][y1][i];
}
for(int i = k - 1; i >= 0; i--)//越往上的日记本越在数组里面,所以倒着遍历找最小值
{
if(c == g[x1][y1][i])
{
cout << c << " " << k - i - 1 << endl;//输出编号以及移动日记本数目
g[x1][y1].erase(g[x1][y1].begin() + i);
break;//防止编号相同的继续被销毁
}
}
g[x1][y1].push_back(a);
}
}
}
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
int t = 1;
while(t--) solve();
return 0;
}
OK,结束~~~~