目录
前言 :
全程一直再写,但是基本都是模拟体验还好
因为规定半小时的训练赛,当开到 E E E题,刚刚开始算法的时候就没时间了,只有半小时了
A - Chuanpai
思路
范围很小,看了一下可以直接暴力 + 特判即可
CODE
#include <bits/stdc++.h>
using namespace std;
const int N = 7;
int a[N];
void solve()
{
int k;
cin>>k;
if(k>12)
{
cout<<0<<endl;
return;
}
int ans = 0 ;
for(int i=1; i<=6; i++)
{
if(k - i <= 6 && k - i>0 && (k-i)<=i)
{
++ans;
}
}
cout<<ans<<endl;
}
int main()
{
ios::sync_with_stdio(false);
int t;
cin>>t;
while(t -- )
solve();
return 0;
}
K - K-skip Permutation
思路
从当前点开始把能遍历到的点,全部打一个标记即可,为了不 T L E TLE TLE
我们 c o n t i n u e continue continue一下 以及 特判 1
CODE
#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
const int N = 7;
int a[N];
unordered_map<int,int> mp;
vector<int> v;
void solve()
{
int n,k;cin>>n>>k;
if(k == 1)
{
for(int i=1;i<=n;i++)
{
if(i == n)
cout<<i;
else
cout<<i<<" ";
}
return;
}
for(int i = 1;i<=n;i++)
{
int j = i+k;
if(mp[i])
continue;
while(j<=n)
{
if(!mp[j])
{
if(!mp[i])
v.push_back(i);
mp[i] = 1;
v.push_back(j);
mp[j] = 1;
}
j+=k;
}
}
for(int i=1;i<=n;i++)
{
if(!mp[i])
v.push_back(i);
}
int len = v.size();
for(int i = 0 ;i<len;i++)
{
if(i == len - 1)
cout<<v[i];
else
cout<<v[i]<<" ";
}
}
int main()
{
ios::sync_with_stdio(false);
// int t;
// cin>>t;
// while(t -- )
solve();
return 0;
}
D - Rock Paper Scissors
思路
贪心的匹配就行 从赢 到 平 最后才输
(这题写了很久 模拟还是写的太慢了!!)
CODE
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
const int N = 7;
struct node
{
int a,b,c;
} x,y;
void solve()
{
cin>>x.a>>x.b>>x.c;
cin>>y.a>>y.b>>y.c;
int score = 0 ;
if(y.a > 0 )
{
if(x.c > 0 )
{
int t = y.a;
score += min(x.c , y.a);
y.a -= x.c;
x.c = (x.c - t > 0)?(x.c-t):0;
}
}
if(y.a > 0)
{
if(x.a > 0)
{
int t = y.a;
y.a -= x.a;
x.a = (x.a - t > 0)?(x.a- t):0;
}
}
if(y.a > 0)
{
if(x.b > 0)
{
int t = y.a;
score -= y.a;
x.b = (x.b - t>0)?(x.b - t) :0;
}
}
if(y.b > 0 )
{
if(x.a > 0 )
{
int t = y.b;
score+=min(x.a,y.b);
y.b -= x.a;
x.a = (x.a - t > 0)?(x.a-t):0;
}
}
if(y.b >0)
{
if(x.b > 0)
{
int t =y.b;
y.b -= x.b;
x.b = (x.b - t > 0)?(x.b - t):0;
}
}
if(y.b > 0)
{
if(x.c > 0)
{
int t = y.b;
score -= y.b;
x.c = (x.c - t >0)?(x.c - t):0;
}
}
if(y.c > 0)
{
if(x.b >0)
{
int t = y.c;
score+=min(y.c,x.b);
y.c -= x.b;
x.b = (x.b - t >0)?(x.b - t):0;
}
}
if(y.c > 0)
{
if(x.c > 0)
{
int t = y.c;
y.c -= x.c;
x.c = (x.c - t >0)?(x.c - t):0;
}
}
if(y.c>0)
{
if(x.a>0)
{
int t =y.c;
score -= y.c;
x.a = (x.a - t>0)?(x.a -t):0;
}
}
cout<<score<<endl;
}
signed main()
{
ios::sync_with_stdio(false);
int t;
cin>>t;
while(t -- )
solve();
return 0;
}
H - Nihongo wa Muzukashii Desu
思路
懂日文的队友,看懂了题目
直接 查找 那几个 m a s u masu masu 然后 根据规则换即可
CODE
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define endl '\n'
const int N = 10;
string s;
void get(int len )
{
for(int i = 0 ; i<=len; i++)
cout<<s[i];
}
void solve()
{
cin>>s;
int len = s.size();
if(s == "ikimasu")
{
cout<<"itte"<<endl;
return;
}
/** if(int i = s.find("ikimasu") < len)
{
int pos = len - (string("ikimasu").size());
get(pos-1);
cout<<"itte"<<endl;
return;
}**/
if(int i = s.find("chimasu")<len)
{
int pos = len - (string("chimasu").size());
get(pos-1);
cout<<"tte"<<endl;
return;
}
if(int i = s.find("rimasu")<len)
{
int pos = len - (string("rimasu").size());
get(pos-1);
cout<<"tte"<<endl;
return;
}
if(int i = s.find("mimasu")<len)
{
int pos = len - (string("mimasu").size());
get(pos-1);
cout<<"nde"<<endl;
return;
}
if(int i = s.find("bimasu")<len)
{
int pos = len - (string("bimasu").size());
get(pos-1);
cout<<"nde"<<endl;
return;
}
if(int i = s.find("nimasu")<len)
{
int pos = len - (string("nimasu").size());
get(pos-1);
cout<<"nde"<<endl;
return;
}
if(int i = s.find("kimasu")<len)
{
int pos = len - (string("kimasu").size());
get(pos-1);
cout<<"ite"<<endl;
return;
}
if(int i = s.find("gimasu")<len)
{
int pos = len - (string("gimasu").size());
get(pos-1);
cout<<"ide"<<endl;
return;
}
if(int i = s.find("shimasu")<len)
{
int pos = len - (string("shimasu").size());
get(pos-1);
cout<<"shite"<<endl;
return;
}
if(int i = s.find("imasu")<len)
{
int pos = len - (string("imasu").size());
get(pos-1);
cout<<"tte"<<endl;
return;
}
}
int main()
{
ios::sync_with_stdio(false);
int t;
cin>>t;
while(t -- )
solve();
return 0;
}
B - Hotpot
思路
无脑计算了一下 时间复杂度 算出来是
1
e
8
1e8
1e8 感觉可以过 交上去T了
然后才发现看错题目
我们其实只需要 计算一下周期即可,会发现是两个周期重复的
CODE
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define endl '\n'
const int N = 1e5+10;
int a[N];
unordered_map<int,int> mp;
void solve()
{
mp.clear();
int n,k,m;
cin>>n>>k>>m;
int h[n+1] = {0};
int t[n+1] = {0};
for(int i=1; i<=n; i++)
cin>>a[i];
int l = 1;
int t1 = 2*n;
while(t1 -- )
{
if(!mp[a[l]])
{
mp[a[l]]++;
l++;
if(l>n)
l=1;
continue;
}
h[l]++;
mp[a[l]] = 0 ;
++l;
if(l > n)
l = 1;
}
int cnt = m/(2*n);
for(int i=1;i<=n;i++)
h[i]*=cnt;
int t2 = m-cnt*2*n;
while(t2 -- )
{
if(!mp[a[l]])
{
mp[a[l]]++;
l++;
if(l>n)
l=1;
continue;
}
h[l]++;
mp[a[l]] = 0 ;
++l;
if(l > n)
l = 1;
}
for(int i=1; i<=n; i++)
{
if(i == n)
cout<<h[i];
else
cout<<h[i]<<" ";
}
cout<<endl;
}
int main()
{
ios::sync_with_stdio(false);
int t;
cin>>t;
while(t -- )
solve();
return 0;
}