A - Time Limit
题目
这题巨水
#include <iostream>
#include <cstring>
#include <cmath>
#include <bitset>
#include <queue>
#include <vector>
#include <cstdio>
#include <queue>
#include <sstream>
#include <string>
#include <algorithm>
#include <map>
#define rep(i, a, b) for (int i = a; i <= b; i++)
#define reps(i, a, b) for (int i = a; i >= b; i--)
#define mk make_pair
using namespace std;
const int N = 1e5 + 7;
const int M = 1e3+ 7;
const int inf = 0x3f3f3f3f;
const int mod = 1000000007;
typedef long long ll;
int a[N];
int main()
{
int t;
scanf("%d",&t);
while (t--){
int n;
int x;
scanf("%d",&n);
rep(i,1,n)scanf("%d",&a[i]);
x=3*a[1];
rep(i,1,n){
x=max(x,a[i]+1);
}
if(x&1)x++;
printf("%d\n",x);
}
return 0;
}
B - Caesar Cipher
题目
加密是字母表右移或左移,显然这个时候字母表应该看成一个环,就在Z后面再来一遍字母表就行,然后就是查表得出答案。
#include <iostream>
#include <cstring>
#include <cmath>
#include <bitset>
#include <queue>
#include <vector>
#include <cstdio>
#include <queue>
#include <sstream>
#include <string>
#include <algorithm>
#include <map>
#define rep(i, a, b) for (int i = a; i <= b; i++)
#define reps(i, a, b) for (int i = a; i >= b; i--)
#define mk make_pair
using namespace std;
const int N = 1e5 + 7;
const int M = 1e2+ 7;
const int inf = 0x3f3f3f3f;
const int mod = 1000000007;
typedef long long ll;
int a[N];
char s1[M],s2[M],ch[M];
char alp[M]="ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ";
int main()
{
int t;
int cnt=0;
scanf("%d",&t);
while (t--){
int n,m;
scanf("%d%d",&n,&m);
scanf("%s%s",s1+1,s2+1);
int x=s2[1]-s1[1];
if(x<0)x+=26;
scanf("%s",ch+1);
rep(i,1,m){
int y=ch[i]-'A';
ch[i]=alp[y+26-x];
}
printf("Case #%d: %s\n",++cnt,ch+1);
}
return 0;
}
C - Fall Guys
高中物理题?判断每个人到达时,皇冠的位置,然后计算取得它所额外需要的时间加上到达时间和延迟,然后排序即可。
#include <iostream>
#include <cstring>
#include <cmath>
#include <bitset>
#include <queue>
#include <vector>
#include <cstdio>
#include <queue>
#include <sstream>
#include <string>
#include <algorithm>
#include <map>
#define rep(i, a, b) for (int i = a; i <= b; i++)
#define reps(i, a, b) for (int i = a; i >= b; i--)
#define mk make_pair
using namespace std;
const int N = 2e5 + 7;
const int M = 1e2+ 7;
const int inf = 0x3f3f3f3f;
const int mod = 1000000007;
typedef long long ll;
struct node
{
int a,c;
bool operator<(const node&t1)const{
if(a!=t1.a)return a<t1.a;
else return c<t1.c;
}
}E[N];
int b[N],d[N];
int main()
{
int t;
int cnt=0;
scanf("%d",&t);
while (t--){
int n,h,H;
scanf("%d%d%d",&n,&h,&H);
rep(i,1,n){
scanf("%d",&b[i]);
E[i].c=i;
if(1&b[i]/H){
int tt=b[i]%H;
if(H-tt>h)E[i].a=H-tt-h+b[i];
else E[i].a=b[i];
}else{
int tt=b[i]%H;
if(tt>h)E[i].a=H-tt+H-h+b[i];
else E[i].a=b[i];
}
}
rep(i,1,n){
scanf("%d",&d[i]);
E[i].a+=d[i];
}
sort(E+1,E+1+n);
printf("%d\n",E[1].c);
}
return 0;
}
D-Function
题目
先递归,发现与上次递归答案相同时退出递归,用乘法得出答案。
#include <iostream>
#include <cstring>
#include <cmath>
#include <bitset>
#include <queue>
#include <vector>
#include <cstdio>
#include <queue>
#include <sstream>
#include <string>
#include <algorithm>
#include <map>
#define rep(i, a, b) for (ll i = a; i <= b; i++)
#define reps(i, a, b) for (int i = a; i >= b; i--)
#define mk make_pair
using namespace std;
const int N = 2e5 + 7;
const int M = 1e2+ 7;
const int inf = 0x3f3f3f3f;
const int mod = 1000000007;
typedef long long ll;
ll f(ll n)
{
if(n==0)return 0;
ll ans=1;
ll p=n+1;
ll x=n;
ll temp=1;
while (x){
temp*=10;
ans*=n%temp;
ans%=p;
x/=10;
}
return ans%p;
}
int main()
{
std::ios::sync_with_stdio(false);
cin.tie(NULL);
int t;
scanf("%d",&t);
while (t--){
ll n,m;
scanf("%lld%lld",&n,&m);
ll sum=0;
ll temp=0;
ll j=-1;
rep(i,1,m){
if(i==1)temp= f(n);
else {
if (temp == f(temp)) {
j = i;
break;
}
}
sum+=temp;
temp= f(temp);
}
if(j!=-1)
sum+=(m-j+1)*temp;
if(m==0)sum=0;
printf("%lld\n",sum);
}
return 0;
}
E - PepperLa’s Cram School
题目
就看最小非0元素出现次数就行,刚开始我默认是1然后wa傻了。
#include <iostream>
#include <cstring>
#include <cmath>
#include <bitset>
#include <queue>
#include <vector>
#include <cstdio>
#include <queue>
#include <sstream>
#include <string>
#include <algorithm>
#include <map>
#define rep(i, a, b) for (ll i = a; i <= b; i++)
#define reps(i, a, b) for (int i = a; i >= b; i--)
#define mk make_pair
using namespace std;
const int N = 1e3 + 7;
const int M = 1e5+ 7;
const int inf = 0x3f3f3f3f;
const int mod = 1000000007;
typedef long long ll;
int dis[N][N];
int main()
{
std::ios::sync_with_stdio(false);
cin.tie(NULL);
int n;
while (~scanf("%d",&n)){
int sum=0;
int mi=inf;
rep(i,1,n){
rep(j,1,n){
scanf("%d",&dis[i][j]);
if(dis[i][j]!=0)
mi= min(mi,dis[i][j]);
}
}
rep(i,1,n){
rep(j,1,n){
if(dis[i][j]==mi)sum++;
}
}
printf("%d\n",sum/2);
}
return 0;
}
F - Halli Galli
题目
每局只发一张牌,用个map记录一下每局的情况就好了。
#include <iostream>
#include <cstring>
#include <cmath>
#include <bitset>
#include <queue>
#include <vector>
#include <cstdio>
#include <queue>
#include <sstream>
#include <string>
#include <algorithm>
#include <map>
#define rep(i, a, b) for (ll i = a; i <= b; i++)
#define reps(i, a, b) for (int i = a; i >= b; i--)
#define mk make_pair
using namespace std;
const int N = 2e5 + 7;
const int M = 1e2+ 7;
const int inf = 0x3f3f3f3f;
const int mod = 1000000007;
typedef long long ll;
struct node
{
char card='Z';
int num=0;
}peo[10];
int main()
{
std::ios::sync_with_stdio(false);
cin.tie(NULL);
int t;
scanf("%d",&t);
while (t--){
int n,k;
int ans=0;
scanf("%d%d",&k,&n);
map<char,int>mp;
for(int i=1;i<=10;i++){
peo[i].card='Z';
peo[i].num=0;
}
rep(i,1,k){
int j=i%n;
if (j==0)j=n;
getchar();
scanf("%c %d",&peo[j].card,&peo[j].num);
mp.clear();
rep(l,1,n){
mp[peo[l].card]+=peo[l].num;
}
if(mp['A']==5)ans++;
if(mp['B']==5)ans++;
if(mp['G']==5)ans++;
if(mp['P']==5)ans++;
}
printf("%d\n",ans);
}
return 0;
}
G - Color the blocks
找规律,第j列和j+2列相同,第j列要么是黑白相间要么全黑全白.n>=4时,j和j+1列不同,此时只有4种,所特判n<4。
#include <iostream>
#include <cstring>
#include <cmath>
#include <bitset>
#include <queue>
#include <vector>
#include <cstdio>
#include <queue>
#include <sstream>
#include <string>
#include <algorithm>
#include <map>
#define rep(i, a, b) for (ll i = a; i <= b; i++)
#define reps(i, a, b) for (int i = a; i >= b; i--)
#define mk make_pair
using namespace std;
const int N = 1e3 + 7;
const int M = 3e5+ 7;
const int inf = 0x3f3f3f3f;
const int mod = 1000000007;
typedef long long ll;
ll d[N][N];
int main()
{
std::ios::sync_with_stdio(false);
cin.tie(NULL);
int t;
scanf("%d",&t);
while (t--){
int n;
scanf("%d",&n);
if(n==1)puts("2");
else if(n==2)puts("16");
else if(n==3)puts("32");
else puts("4");
}
return 0;
}
H - August
还不会。
I - Goodbye
要让自己不能选出除1,n’之外的因数,那么n’为质数,所以找到最初的n的最大的两个质因数就是答案,找不到时再判断n是否为质数。
#include <iostream>
#include <cstring>
#include <cmath>
#include <bitset>
#include <queue>
#include <vector>
#include <cstdio>
#include <queue>
#include <sstream>
#include <string>
#include <algorithm>
#include <map>
#define rep(i, a, b) for (ll i = a; i <= b; i++)
#define reps(i, a, b) for (int i = a; i >= b; i--)
#define mk make_pair
using namespace std;
const int N = 1e5 + 7;
const int M = 1e5+ 7;
const int inf = 0x3f3f3f3f;
const int mod = 1000000007;
typedef long long ll;
bool vis[N];
int prime[M];
int cnt=0;
int num[M];
void create(int n) {
for (int i = 2; i <= n; i++) {
if (!vis[i])
prime[++cnt] = i;
for (int j = 1; j <= cnt; j++) {
if (i * prime[j] > n)
break;
vis[i * prime[j]] = true;
if (i % prime[j] == 0)
break;
}
}
}
int main()
{
std::ios::sync_with_stdio(false);
cin.tie(NULL);
int t;
scanf("%d",&t);
create(1e5);
while (t--){
memset(num,0,sizeof num);
int n;
int k=0;
scanf("%d",&n);
for(int i=1;prime[i]*prime[i]<=n;i++){
while (n%prime[i]==0)
{
n/=prime[i];
num[++k]=prime[i];
}
}
if(n>1)num[++k]=n;
if(k==1)puts("0");//等于1说明自身是质数。
else if(k==2)puts("-1");
else{
printf("%d\n",num[k]*num[k-1]);
}
}
return 0;
}