这次换了编译器,用Dev C++写的。
F
#include <bits/stdc++.h>
using namespace std;
int a[520], b[520];
int n,m;
int cnt=1;
int main(){
int T;
scanf("%d", &T);
while(T--){
int mina=65550,minb=65550;
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
mina=min(mina,a[i]);
}
if(m)
{
for(int i=0;i<m;i++)
{
scanf("%d",&b[i]);
minb=min(b[i],minb);
}
}
printf("Problem %d:\n",cnt+1000);
printf("Shortest judge solution: %d bytes.\n",mina);
if(m)
printf("Shortest team solution: %d bytes.\n",minb);
else
printf("Shortest team solution: N/A bytes.\n");
cnt++;
}
}
K
#include <bits/stdc++.h>
using namespace std;
int main(){
int T;
scanf("%d", &T);
while(T--){
int rank;
cin>>rank;
string name;
cin>>name;
int prob;
cin >>prob;
string state;
cin>>state;
int p;
if(state == "Running"){
cin>>p;
}
if(state =="FB"){
state = "AC*";
}
int tmp = 100;
bool flag = 0;
for(int i = 1; i <= 3; i++){
if (rank >= tmp){
flag = 1;
printf("%d", rank/tmp);
rank = rank - int(rank/tmp) * tmp;
}
else if(!flag)
cout<<' ';
else
cout<<'0';
tmp =tmp /10;
}
//cout<<setiosflags(ios::left)<<setw(3)<<rank;
cout<<'|';
cout<<setiosflags(ios::left)<<setw(16)<<name;
cout<<'|';
cout<<prob;
cout<<'|'<<'[';
if(state != "Running"){
cout<<" ";
cout<<setiosflags(ios::left)<<setw(6)<<state;
}
else{
for(int i=1; i<=p; i++)
cout<<'X';
for(int i=p+1; i<=10; i++)
cout<<' ';
}
cout<<']'<<endl;
}
return 0;
}
H
#include <bits/stdc++.h>
using namespace std;
const int maxn=1e6+10;
int t,n;
string a;
int dp[maxn],tmp[maxn];
inline string read()
{
char ch = getchar();
string st1 = "";
while (!((ch >= 'a') && (ch <= 'z')))
ch = getchar();
while ((ch >= 'a') && (ch <= 'z'))
st1 += ch, ch = getchar();
return st1;
}
int main()
{
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
a=read();
for(int i=0;i<=n;i++)
{
dp[i]=0;
tmp[i]=0;
}
dp[n-1]=0,tmp[n-1]=n;
if(n==2)
{
if(a[1]>a[2]||a[1]==a[2])
printf(">\n");
else
printf("<\n");
}
else
{
for(int i=n-1;i>=0;i--)
{
if(a[i]==a[i-1])
{
dp[i-1]=dp[tmp[i]];
tmp[i-1]=tmp[i];
//printf("tmp[%d]=%d",i-1,tmp[i-1]);
}
else if(a[i-1]>a[i])
{
dp[i-1]=1;
tmp[i-1]=i-1;
}
else
{
dp[i-1]=-1;
tmp[i-1]=i-1;
}
}
for(int i=0;i<n-1;i++)
{
if(dp[i]==1||dp[i]==0)
printf(">");
else
printf("<");
}
printf("\n");
}
}
return 0;
}
B
#include<bits/stdc++.h>
#define inf 0X3f3f3f3f
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
int a, b;
ull k;
bool check(ull n)
{
__int128 ans = 1;
for (int i = 0; i < a; i++)
{
ans = ans * n;
if (ans > k)
return false;
}
__int128 t = (__int128)ceil(log2(n));
for (int i = 0; i < b; i++)
{
ans = ans * t;
if (ans > k)
return false;
}
return true;
}
int main()
{
int t;
scanf("%d", &t);
while (t--)
{
cin >> a >> b >> k;
ull l = 1, r = 1e18;
while (l < r)
{
ull m = (l + r + 1) >> 1;
if (check(m))
l = m;
else
r = m - 1;
}
cout << r << endl;
}
}
A
(只比了三个小时,这个题是之后看题解写的)
#include<bits/stdc++.h>
#define inf 0X3f3f3f3f
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int MOD = 1e9 + 7;
const int maxn = 1e5 + 20;
vector<int> p[maxn]; // 质数表:放入i的倍数出现的位置
int query(int i, int l, int r){ //计算下标出现的次数
return upper_bound(p[i].begin(), p[i].end(), r) - lower_bound(p[i].begin(), p[i].end(), l);
}
bool binary(int l, int r, int d){
// 分解质因数
// 对每一个质数,考虑其是否能满足整除
for(int i = 2; i * i <= d; i++){
int cnt = 0;
while(d % i == 0){
d /= i;
cnt++;
}
if(cnt > query(i, l, r))
return false;
}
if(d > 1 && query(d, l, r) < 1)
return false;
return true;
}
int main(){
int T;
scanf("%d", &T);
while(T--){
int n, m;
scanf("%d%d", &n, &m);
for(int i = 0; i <= 1e5; i++)
p[i]. clear();
for(int i = 1; i <= n; i++){
int x;
scanf("%d", &x);
//构造质数表
for(int k = 2; k * k <= x; k++){
while(x % k == 0){
x /= k;
p[k].push_back(i);
}
}
if(x > 1)
p[x].push_back(i);
}
while(m--){
int l, r, d;
scanf("%d%d%d", &l, &r, &d);
if(!binary(l, r, d))
printf("No\n");
else
printf("Yes\n");
}
}
return 0;
}