心情不好然后去写Div2,发现:
A题不是SB题吗?
B题不是SB题吗?
C题不是SB题吗?
D题不是SB题吗?
然后考场只A掉了A和C……
考完之后3分钟把B和D都调出来了……
对于这种情况我只能说MDZZ……
T1:看样例怎么算的,然后随便模拟一下,都没看题面。
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#define Rep(i,n) for(int i = 1;i <= n;i ++)
using namespace std;
int main ()
{
long long n,a,b,c,d,e,f,g;
scanf("%I64d%I64d%I64d%I64d%I64d%I64d%I64d%I64d",&n,&a,&b,&c,&d,&e,&f,&g);
a *= b;
a /= f;
c *= d;
e /= g;
printf("%I64d\n",min(a,min(c,e)) / n);
return 0;
}
T2:我一直以为是四种人……然而只有三种……
感觉自己英语有待提升……
大模拟题。
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <map>
using namespace std;
const int N = 1005;
struct Kill{int vis[5];string name;}o[N];
bool vis[16];
int Maxn[56];
int main ()
{
int n;
cin >> n;
for(int i = 1;i <= n;i ++)
{
int p ;
cin >> p;
cin >> o[i].name;
for(int j = 1;j <= p;j ++)
{
int a,b,c,x,y,z;
scanf("%d-%d-%d",&a,&b,&c);
x = a,y = b,z = c;
int pa = a % 10;a /= 10;
int pb = b % 10;b /= 10;
int pc = c % 10;c /= 10;
// if((a == pa - 1 || pa == a - 1) && (b == pb - 1 || pb == b - 1)&& (c == pc - 1 || c == pc + 1))continue;
vis[a] = 1,vis[pa] = 1,vis[pb] = 1,vis[pc] = 1,vis[b] = 1,vis[c] = 1;
//printf("%d %d %d %d %d %d\n",a,pa,b,pb,c,pc);
int cnt = 0;
for(int k = 0;k <= 9;k ++)if(vis[k])cnt ++,vis[k] = 0;
if(cnt == 6 && a > pa && pa > b && b > pb && pb > c && c > pc)o[i].vis[2] ++,Maxn[2] = max(Maxn[2],o[i].vis[2]);
else if(cnt == 1)o[i].vis[1] ++,Maxn[1] = max(Maxn[1],o[i].vis[1]);
else o[i].vis[3] ++,Maxn[3] = max(Maxn[3],o[i].vis[3]);
}
}
printf("If you want to call a taxi, you should call:");
int pos;
for(pos = n;pos;pos --)if(o[pos].vis[1] == Maxn[1])break;
for(int i = 1;i < pos;i ++)if(o[i].vis[1] == Maxn[1])cout << " " << o[i].name << ",";
cout <<" "<< o[pos].name << "." << endl;
printf("If you want to order a pizza, you should call:");
for(pos = n;pos;pos --)if(o[pos].vis[2] == Maxn[2])break;
for(int i = 1;i < pos;i ++)if(o[i].vis[2] == Maxn[2])cout << " " << o[i].name << ",";
cout <<" "<< o[pos].name << "." << endl;
printf("If you want to go to a cafe with a wonderful girl, you should call:");
for(pos = n;pos;pos --)if(o[pos].vis[3] == Maxn[3])break;
for(int i = 1;i < pos;i ++)if(o[i].vis[3] == Maxn[3])cout << " " << o[i].name << ",";
cout <<" "<< o[pos].name << "." << endl;
return 0;
}
T3:
两个小孩打算对一个数进行操作,每次可以把这个数除以一个它的因子,但是不能除以1或者它本身。
现在问你采取最优策略,谁先会除到1,如果是A的话,输出第一次操作之后剩下给B的数是什么。
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
typedef pair<int,long long> pii;
bool no[30000005];
int p[5000005],cnt;
pii Div(long long x)
{
long long xx = x;
bool flag = 1;
for(int i = 1;1ll * p[i] * p[i] <= x;i ++)if(x % p[i] == 0){flag = 0;break;}
if(flag)return pii(1,0);
long long ans = 1;
int cp = 0;
for(int i = 1;i <= cnt && cp < 2;i ++)
{
bool fl = 0;
if(1ll * p[i] * p[i] == xx && cp == 0)return pii(2,0);
if(x % p[i] == 0)x /= p[i],fl = 1;
if(fl)ans *= p[i],cp ++;
}
if(x == 1)return pii(2,0);
if(cp == 1)
{
flag = 1;
for(int i = 1;1ll * p[i] * p[i] <= x;i ++)if(x % p[i] == 0){flag = 0;ans *= p[i];break;}
if(flag)return pii(2,0);
else return pii(1,ans);
}
if(cp == 2)return pii(1,ans);
}
void Get()
{
for(int i = 2;i <= 10000000;i ++)
{
if(!no[i])p[++ cnt] = i;
for(int j = 1;j <= cnt && i * p[j] <= 10000000;j ++)
{ no[i * p[j]] = 1;
if(i % p[j] == 0)break;
}
}
}
int main ()
{
long long x;
scanf("%lld",&x);
Get();
pii w = Div(x);
int xx = w.first;
long long y = w.second;
if(xx == 2)return printf("%d\n",2),0;
else printf("%d\n%I64d\n",1,y);
return 0;
}
T4:
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;
const int Mod = 1e9 + 7;
long long Power(long long a,long long p)
{
long long ans = 1;
for(int i = 1;i <= p;i ++)ans = ans * a % Mod;
return ans;
}
int main ()
{
long long n,m,k;
scanf("%I64d%I64d%I64d",&n,&m,&k);
if(k % 2 == 0 && k < n)printf("%I64d\n",m);
if(k == 1 || k > n)printf("%I64d\n",Power(m,n) % Mod);
else if(k == n)printf("%I64d\n",Power(m,(n + 1) >> 1) % Mod);
else if(k & 1)printf("%I64d\n",1ll * m * m % Mod);
return 0;
}