26.7.9
T2之徒手算数
#include<bits/stdc++.h>
using namespace std;
constexpr int maxn=3010;
long long read() {long long x=0,f=1;char ch=getchar();while (ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while (ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch-'0');ch=getchar();}return x*f;}
int n;
void tp2(int a1,int a2,int b1,int b2)
{
if (a1)
{
if (a2)
{
if (b1)
{
if (b2) printf("0\n");
else printf("1\n");
}
else
{
if (b2) printf("1\n");
else printf("2\n");
}
}
else
{
if (b1)
{
if (b2) printf("1\n");
else printf("2\n");
}
else
{
if (b2) printf("3\n");
else printf("3\n");
}
}
}
else
{
if (a2)
{
if (b1)
{
if (b2) printf("1\n");
else printf("3\n");
}
else
{
if (b2) printf("2\n");
else printf("4\n");
}
}
else
{
if (b1)
{
if (b2) printf("2\n");
else printf("4\n");
}
else
{
if (b2) printf("3\n");
else printf("You have no egg!");
}
}
}
}
int a[maxn][maxn];
bool f[maxn];
int main()
{
freopen("fountain.in","r",stdin);
freopen("fountain.out","w",stdout);
n=read();
if (n == 1)
{
int x=read();
if (x) printf("0\n");
else printf("You have no egg!");
}
else if (n == 2)
{
string s;
for (int i=1;i<=n;i++)
{
cin >> s;
for (int j=1;j<=n;j++) a[i][j]=s[j-1]-'0';
}
tp2(a[1][1],a[1][2],a[2][1],a[2][2]);
}
else
{
string s;
for (int i=1;i<=n;i++)
{
cin >> s;
for (int j=1;j<=n;j++) {a[i][j]=s[j-1]-'0';if (!a[i][j]) f[i]=1;}
}
int F=0;
for (int i=1;i<=n;i++) if (!f[i]) F=1;
if (F)
{
int k=0;
for (int j=1;j<=n;j++)
{
int fl=1;
for (int i=1;i<=n;i++) if (!a[i][j]) fl=0;
if (fl) k++;
}
printf("%d\n",n-k);
}
else printf("You have no egg!");
}
return 0;
}
T3之五层循环
#include<bits/stdc++.h>
using namespace std;
constexpr int maxn=3010;
long long read() {long long x=0,f=1;char ch=getchar();while (ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while (ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch-'0');ch=getchar();}return x*f;}
int p,n,m;
long long ksm(long long x,long long y)
{
long long res=1;
while (y)
{
if (y&1) (res*=x)%=p;
(x*=x)%=p;
y>>=1;
}
return res;
}
struct shi_shan_code
{
int s[maxn];
void cl()
{
for (int i=0;i<n*m;i++) s[i]=0;
}
void init1()
{
for (int a=0;a<=m;a++) s[a]++;
}
void init2()
{
for (int a=0;a<=m;a++)
for (int b=0;b<=m;b++) s[a+b]++;
}
void init3()
{
for (int a=0;a<=m;a++)
for (int b=0;b<=m;b++)
for (int c=0;c<=m;c++) s[a+b+c]++;
}
void init4()
{
for (int a=0;a<=m;a++)
for (int b=0;b<=m;b++)
for (int c=0;c<=m;c++)
for (int d=0;d<=m;d++) s[a+b+c+d]++;
}
void init5()
{
for (int a=0;a<=m;a++)
for (int b=0;b<=m;b++)
for (int c=0;c<=m;c++)
for (int d=0;d<=m;d++)
for (int e=0;e<=m;e++) s[a+b+c+d+e]++;
}
}ss;
int main()
{
freopen("pr.in","r",stdin);
freopen("pr.out","w",stdout);
p=read();
int T=read();
while (T--)
{
n=read(),m=read();
ss.cl();
if (n == 1) ss.init1();
else if (n == 1) ss.init2();
else if (n == 3) ss.init3();
else if (n == 4) ss.init4();
else if (n == 5) ss.init5();
// for (int i=0;i<=m*n;i++) printf("%.3lf ",ss.s[i]);
// cerr << endl;
// for (int i=1;i<=m*n;i++) cerr << S[i] << " ";
double tot=ksm(m+1,n*2)*1.0;
// cerr << tot << endl;
// for (int i=0;i<=n*m;i++) ss.s[i]/=tot;
// for (int i=0;i<=m*n;i++) printf("%.3lf ",ss.s[i]);
// cerr << endl;
double ans=0;
for (int i=1;i<=m*n;i++)
{
int t=0;
for (int j=0;j<i;j++) t+=ss.s[j];
// cerr << t << endl;
// printf("%.3lf ",t);
ans+=1.0*ss.s[i]*t;
}
// cerr << ans << endl;
// cerr << endl;
ans*=p;ans/=tot;
printf("%.0lf\n",ans);
}
return 0;
}
/*
998244353
1
3 4
*/
/*
787878
1
25 25
*/
/*
998244353
1
1 2
*/
/*
998244353
2
1 2
3 4
*/
- 总结:热衷于 \(have\) \(no\) \(egg\)
26.7.14
T4之只能过样例
#include<bits/stdc++.h>
#define int long long
using namespace std;
constexpr int maxn=2e6+10;
int read()
{
int x=0,f=1;
char ch=getchar();
while (ch<'0' || ch>'9')
{
if (ch == '-') f=-1;
ch=getchar();
}
while (ch>='0' && ch<='9')
{
x=(x<<1)+(x<<3)+ch-'0';
ch=getchar();
}
return x*f;
}
int n,m,root;
struct _ {int l,r,sum,lz,ls,rs;}tr[maxn];
int h[maxn],to[maxn],nxt[maxn],tot;
void add(int x,int y) {tot++,to[tot]=y,nxt[tot]=h[x],h[x]=tot;}
void Build(int x)
{
int l1=0,r1=0,l2=0,r2=0,lson=0,rson=0;
for (int i=h[x];i;i=nxt[i])
{
int y=to[i];
Build(y);
if (l1 && r1) l2=tr[y].l,r2=tr[y].r,rson=y;
else l1=tr[y].l,r1=tr[y].r,lson=y;
}
if (!l1 && !r1 && !l2 && !r2 && !lson && !rson) return tr[x].l=tr[x].r=x,void();
else
{
// cerr << l1 << " " << r1 << " " << l2 << " " << r2 << endl;
if (l1>l2) swap(l1,l2),swap(r1,r2),swap(lson,rson);
tr[x].l=l1,tr[x].r=r2,tr[x].ls=lson,tr[x].rs=rson;
}
// cerr << x << " " << tr[x].l << " " <<tr[x].r << endl;
}
//void Pushup(int x) {tr[x].sum=tr[tr[x].ls].sum+tr[tr[x].rs].sum;}
void Upd(int x,int l,int r,int val)
{
// cout << x << " " << l << " " << r << endl;
// cout << x << " " << l << " " << tr[x].l << " " << r << " " << tr[x].r << endl;
if (l == tr[x].l && tr[x].r == r) return tr[x].sum=val*(r-l+1),void();
// cout << "x:" << x << endl;
// cout << l << " " << tr[tr[x].ls].r << endl;
// cout << r << " " << tr[tr[x].rs].l << endl;
if (l<=tr[tr[x].ls].r) Upd(tr[x].ls,l,tr[tr[x].ls].r,val);
if (r>=tr[tr[x].rs].l) Upd(tr[x].rs,tr[tr[x].rs].l,r,val);
// Pushup(x);
// cout << "chk:";
// cout << x << " " << tr[x].sum << endl;
}
int query(int x,int l,int r)
{
int res=0;
if (l == tr[x].l && tr[x].r == r) return tr[x].sum;
if (l<=tr[tr[x].ls].r) res+=query(tr[x].ls,l,tr[tr[x].ls].r);
if (r>=tr[tr[x].rs].l) res+=query(tr[x].rs,tr[tr[x].rs].l,r);
return res;
}
int v[maxn];
signed main()
{
n=read(),m=read();
for (int i=1;i<n;i++)
{
int l=read(),r=read();
v[l]=1,v[r]=1;
add(n+i,l),add(n+i,r);
}
for (int i=1;i<=2*n-1;i++) if (!v[i]) {root=i;break;}
Build(root);
while (m--)
{
int op=read();
if (op == 1)
{
int l=read(),r=read(),k=read();
Upd(root,l,r,k);
}
else
{
int l=read(),r=read();
// printf("%d\n",tr[2].sum+tr[3].sum+tr[4].sum);
printf("%lld\n",query(root,l,r));
}
}
return 0;
}
/*bug
5 6
4 5
3 6
1 2
8 7
1 1 5 1
9 1 5
2 2 3
0
2 1 5
5
1 2 5 3
9 2 5
8 2 3
2 2 3
7 4 5
3 4 4
0 4 4
0 1 4
0 1 4
*/
/*
5 6
4 5
3 6
1 2
8 7
*/
/*
5 6
4 5
3 6
1 2
8 7
1 1 5 1
2 2 3
2 1 5
1 2 5 3
2 2 4
2 3 5
*/
26.6.16
T3尝试骗分
#include<bits/stdc++.h>
#define int long long
#define pii pair<int,int>
#define fi first
#define se second
using namespace std;
constexpr int maxn=1e6+10;
int read()
{
int x=0,f=1;
char ch=getchar();
while (ch<'0' || ch>'9')
{
if (ch == '-') f=-1;
ch=getchar();
}
while (ch>='0' && ch<='9')
{
x=(x<<1)+(x<<3)+ch-'0';
ch=getchar();
}
return x*f;
}
int n,m;
int h[maxn],to[maxn],nxt[maxn],tot;
void addedge(int x,int y)
{
tot++;
to[tot]=y;
nxt[tot]=h[x];
h[x]=tot;
}
int a[maxn];
int v[maxn];
void dfs(int x,int fa)
{
if (x == n) x=1;
for (int i=h[x];i;i=nxt[i])
{
int y=to[i];
if (y == fa) continue;
v[y]=1;
dfs(y,x);
}
}
signed main()
{
freopen("delta.in","r",stdin);
freopen("delta.out","w",stdout);
n=read(),m=read();
for (int i=1;i<=m;i++)
{
int x=read(),y=read();
addedge(x,y),addedge(y,x);
}
if (n == m+1)
{
v[1]=1;
dfs(1,0);
int f=1;
for (int i=1;i<=n;i++)
if (!v[i]) f=0;
if (f) puts("AC");
else puts("WA");
}
else puts("WA");
return 0;
}
26.8.17
T3 $O(n^7)$ 暴力 $\to$ $20pts$
#include <bits/stdc++.h>
#define endl '\n'
using namespace std;
constexpr int maxn=1e6+10;
string a,b,c;
int la,lb,lc;
int chk(string s)
{
int len=s.size();
s=" "+s;
int l,r;
if (len%2) l=r=len/2+1;
else l=len/2,r=len/2+1;
while (l>=1 && r<=len)
{
if (s[l]!=s[r]) return 0;
l--,r++;
}
return 1;
}
int main()
{
freopen("palindrome.in","r",stdin);
freopen("palindrome.out","w",stdout);
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
int T;cin >> T;
while (T--)
{
int ans=0;
cin >> a >> b >> c;
la=a.size(),lb=b.size(),lc=c.size();
for (int al=0;al<la;al++)
for (int ar=al;ar<la;ar++)
for (int bl=0;bl<lb;bl++)
for (int br=bl;br<lb;br++)
for (int cl=0;cl<lc;cl++)
for (int cr=cl;cr<lc;cr++)
{
string aa,bb,cc,k;
for (int i=al;i<=ar;i++) aa+=a[i];
for (int i=bl;i<=br;i++) bb+=b[i];
for (int i=cl;i<=cr;i++) cc+=c[i];
// cerr << aa << endl;
// cerr << bb << endl;
// cerr << cc << endl;
k=aa+bb+cc;
// cerr << k << endl;
// cerr << chk(k) << endl;
if (chk(k)) ans++;
}
cout << ans << endl;
}
return 0;
}
/*O(n^7) to solve*/
/*except ok of subtack1*/
/*except 20pts*/
/*2000ms to solve n=1000
maybe std use O(n^3 \log n) to solve*/