Kattis
A - Abstract Painting
答案
#include <bits/stdc++.h>
using namespace std;
#define ll long long
int arr[30][3000];
void solve(){
int n,a,b;
ll ans=0;
cin>>n;
while(n--){
cin>>a>>b;
memset(arr,0,sizeof(arr));
ans=1;
for(int i=1;i<=a;i++){
for(int j=1;j<=b;j++){
if(i==1&&j==1)ans*=18;
else if(i==1||j==1)ans*=6;
else ans*=2;
ans%=1000000000+7;
}
}
cout<<ans<<endl;
}
}
int main()
{
solve();
return 0;
}
D - Dating time
答案
#include <iostream>
#include <algorithm>
#include<bits/stdc++.h>
#define ll long long
#define mem(a,b) memset(a,b,sizeof a)
#define ull unsigned long long
#define INF 0x3f3f3f3f3f3f3f3f
#define inf 0x3f3f3f3f
#define rep(i,a,b) for(auto i=a;i<=b;++i)
#define bep(i,a,b) for(auto i=a;i>=b;--i)
#define lowbit(x) x&(-x)
#define PII pair<int,int>
#define PLL pair<ll,ll>
#define PI acos(-1)
#define pb push_back
#define x first
#define y second
const double eps = 1e-7;
const int mod = 998244353;
const int MOD = 1e9 + 7;
const int N = 2e5 + 10;
const int M = 111;
int dx[]={-1, 0, 1, 0};
int dy[]={0, 1, 0, -1};
using namespace std;
// int dp0[]={0,5,10,16,21,27,32,38,43,49,54,60,60,5,10,16,21,27,32,38,43,49,54,0};
// int dp901[]={};
// int dp902[]={};
// int dp180[]={32,38,43,49,54,60,60,5,10,16,21,27,32,38,43,49,54,60,60,5,10,16,21,27,32};
double get_time(double h,double m){
return h*60+m;
}
void solve(){
int t;
scanf("%d",&t);
while(t--){
int h1,m1;
int h2,m2;
int d;
scanf("%d:%d %d:%d %d",&h1,&m1,&h2,&m2,&d);
vector<double>vp;
int s=get_time(h1,m1);
int e=get_time(h2,m2);
for(int i=0;i<12;i++){
double h=i;
double p=(30*h+d)*1.0/11;
double m=2*p;
vp.pb(get_time(h,m));
vp.pb(get_time(h+12, m));
}
if(d==90){
for (int i = 0; i < 12; i++) {
double h = i;
double p = (30 * h - d)*1.0 / 11;
double m = 2 * p;
vp.pb(get_time(h, m));
vp.pb(get_time(h + 12, m));
}
}
sort(vp.begin(),vp.end());
int tot=0;
for(int i=0;i<vp.size();i++){
if (i && fabs(vp[i] - vp[i - 1]) < eps) continue;
if(vp[i]>=s&&vp[i]<=e) tot++;
}
cout<<tot<<endl;
}
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
solve();
return 0;
}
I - Inspecting Illumination
答案
#include <bits/stdc++.h>
using namespace std;
#define ll long long
int n;
bool arr[1200];
int st[1200];
int to[1200];
queue<int>Q;
void solve(){
cin>>n;
memset(arr,0,sizeof(arr));
for(int i=1;i<=n;i++){
st[i]=1;
}
arr[1]=1;
arr[n+1]=1;
int t=0;
int xtt=1;
while(xtt<n){
xtt*=2;
t++;
}
while (t--)
{
while(!Q.empty())Q.pop();
int mid;
int la=1;
int l=1;
int r=1;
for(int i=1;i<=n+1;i++){
if(arr[i]==1&&i!=1&&arr[i-1]!=1){
l=la;
r=i;
mid=(l+r)/2;
for(int j=mid;j<r;j++){
Q.push(j);
}
arr[mid]=1;
to[l]=mid;
la=i;
}
if(arr[i]==1)la=i;
}
int cn=Q.size();
cout<<"ASK "<<Q.size();
while(!Q.empty()){
cout<<" "<<Q.front();
Q.pop();
}
cout<<endl;
int x;
for(int i=1;i<=cn;i++){
cin>>x;
int ux=st[x];
st[x]=to[ux];
}
}
cout<<"ANSWER";
for(int i=1;i<=n;i++){
cout<<" "<<st[i];
}cout<<endl;
}
int main()
{
solve();
return 0;
}
M - Moscow Dream
答案
#include <bits/stdc++.h>
using namespace std;
#define ll long long
void solve(){
int n,m,a,b,c;
cin>>a>>b>>c>>n;
if(a&&b&&c&&(a+b+c)>=n&&n>2){
cout<<"YES\n";
}
else cout<<"NO\n";
}
int main()
{
solve();
return 0;
}
G - Generating Numbers(补)
答案
#include <iostream>
#include <algorithm>
#include<bits/stdc++.h>
#define ll long long
#define mem(a,b) memset(a,b,sizeof a)
#define ull unsigned long long
#define INF 0x3f3f3f3f3f3f3f3f
#define inf 0x3f3f3f3f
#define rep(i,a,b) for(auto i=a;i<=b;++i)
#define bep(i,a,b) for(auto i=a;i>=b;--i)
#define lowbit(x) x&(-x)
#define PII pair<int,int>
#define PLL pair<ll,ll>
#define PI acos(-1)
#define pb push_back
#define x first
#define y second
const double eps = 1e-6;
const int mod = 998244353;
const int MOD = 1e9 + 7;
const int N = 2e5 + 10;
const int M = 111;
int dx[]={-1, 0, 1, 0};
int dy[]={0, 1, 0, -1};
using namespace std;
int get_len(int x){
int col=0;
while(x){
col++;
x/=10;
}
return col;
}
int calc(int col,int x){
int t=1;
for(int i=1;i<col;i++) t*=10;
if(x-t<10) return x-t;
int res=-1;
int nn=x;
int tot=0;
int cnt=0;
bool flag=0;
while(nn){
cnt++;
int temp=nn%10;
if(cnt!=1){
if(temp){
if(temp==1){
if(!flag) flag=1;
else tot++;
}else tot++;
}
}
res+=temp;
nn/=10;
}
res+=max(tot,1);
return res;
}
void solve(){
int t;
cin>>t;
while(t--){
int n;
cin>>n;
int nn=n;
int tot=0;
int col=get_len(n);
for(int i=1;i<col;i++){
tot+=9*i-1+(i-1);
tot++;
}
while(nn%10==0) nn/=10;
if(nn>1){
if(nn<10) tot+=calc(col,n-1)+1;
else tot+=calc(col,n);
}
cout<<tot<<endl;
}
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
solve();
return 0;
}